Отключение Glimpse в рабочей среде и для glimpse.axd

Как ограничить доступ к glimpse.axd при развертывании в рабочей среде?

Я использую пользовательскую политику RuntimePolicy, чтобы убедиться, что glimpse не включен в рабочей среде, однако я хочу, чтобы пользователи также не попадали в axd.

Если бы мы использовали авторизацию от asp.net, то я понимаю, что я мог бы защитить через путь местоположения в web.config, но эта опция мне недоступна.

Идеи?


person MrMVCMan    schedule 11.09.2013    source источник


Ответы (3)


Glimpse предоставляет несколько различных механизмов для настройки безопасности.

Первый, как вы упомянули, заключается в использовании встроенных функций безопасности ASP.NET. Для этого в свой web.config можно добавить элемент <location>, вот так:

<location path="glimpse.axd">
  <system.web>
    <authorization>
      <deny users="*"/>
      <allow roles="Admin"/>
    </authorization>
  </system.web>
</location>

и теперь только пользователи с ролью Администратор смогут получить доступ к Glimpse.axd.

Кстати, путь не обязательно должен быть /Glimpse.axd, это просто настройка по умолчанию. Вы можете переместить местоположение HttpHandler на URL-адрес, известный только вам и вашей команде, внеся несколько изменений в свой web.config:

<!-- configure system.webServer and/or system.web depending on your ISS configuration -->
<system.webServer>
  <handlers>
    <add name="Glimpse" path="unknownLocation.axd" ... />
  </handlers>
</system.webServer>
<system.web>
  <httpHandlers>
    <add path="unknownLocation.axd" ... />
  </httpHandlers>
</system.web>

<!-- then just configure Glimpse -->
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/unknownLocation.axd">

Второй подход заключается в создании файла IRuntimePolicy. Политики среды выполнения могут защитить доступ к ресурсам (которые обслуживаются через Glimpse.axd), если вы возвращаете RuntimeEvent.ExecuteResource из их свойства ExecuteOn. К сожалению для вас, программа Glimpse игнорирует IRuntimePolicy для запросов к ресурсу по умолчанию (то есть Glimpse.axd). Хорошая новость в том, что вы можете изменить ресурс по умолчанию. Вот как:

  1. Создайте или обновите класс, чтобы он реализовывал IServiceLocator.
  2. Обновите web.config, чтобы указать Glimpse на реализацию вашего локатора сервисов.

    <glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd" serviceLocatorType="YourNamespace.GlimpseLocator, YourAssembly">

  3. Теперь Glimpse знает о вашем локаторе и запросит у него любой тип, который ему нужен, включая ресурс по умолчанию.

  4. Реализовать IResource. Я покажу пример того, как создать страницу, которая просто перенаправляет пользователя на обычную страницу конфигурации (которая больше не является ресурсом по умолчанию), но вы можете заставить ее делать все, что захотите.
  5. Теперь вызовы непосредственно на /Glimpse.axd?n=glimpse_config будут учитывать все IRuntimePolicy, которые у вас есть, и вызовы на Glimpse.axd все равно перенаправляются туда.

Вот код:

// Create the ServiceLocator that is referenced in web.config
public class GlimpseLocator : IServiceLocator
{
    public T GetInstance<T>() where T : class
    {
        if (typeof(T) == typeof(IResource))
            return new SecurityResource() as T;

        return null;
    }

    public ICollection<T> GetAllInstances<T>() where T : class
    {
        return null;
    }
}

//Implementation of new default resource that just redirects
public class SecurityResource : IResource
{
    public string Name 
    {
        get { return "Security"; }
    }

    public IEnumerable<ResourceParameterMetadata> Parameters 
    {
        get { return Enumerable.Empty<ResourceParameterMetadata>(); }
    }

    public IResourceResult Execute(IResourceContext context)
    {
        return new RedirectResourceResult("/Glimpse.axd?n=glimpse_config");
    }
}

// Your custom runtime policy
public class CustomPolicy : IRuntimePolicy
{
    public RuntimeEvent ExecuteOn 
    {
        get { return RuntimeEvent.ExecuteResource; }
    }

    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    {
        //Perform any logic you like and return RuntimePolicy.On or RuntimePolicy.Off
        return RuntimePolicy.Off;
    }
}

Теперь, когда пользователи переходят на Glimpse.axd, они перенаправляются на Glimpse.axd?n=glimpse_config, где либо отображается стандартная страница конфигурации, либо *Политика среды выполнения не разрешает выполнение ресурса с именем 'glimpse_config'.* - в зависимости от вашего IRuntimePolicy.

Итак, как я уже сказал, вариант использования, для которого мы оптимизировали, является первым, в котором используются встроенные в ASP.NET механизмы безопасности. Тем не менее, Glimpse не привязан к этой модели, вам просто нужно пройти через несколько обручей, чтобы настроить банкомат.

В связи с этим мы собираемся значительно улучшить историю конфигурации в Glimpse 2.0, которая в настоящее время находится в процессе. .

person nikmd23    schedule 12.09.2013
comment
Я рассматриваю реализацию второго варианта, который вы описали выше, чтобы иметь пользовательскую политику RuntimePolicy, но (я уверен, что я что-то здесь упускаю) я не могу открыть фактическую страницу редактирования. Метод Execute в CustomPolicy, похоже, не срабатывает. Я получаю правильное перенаправление на n=glimpse_config, а политика среды выполнения не разрешает выполнение ресурса с именем 'glimpse_config'. появляется сообщение, но независимо от того, что я добавляю в метод Execute, оно все равно не отображается. Это что-то, чего мне не хватает? Он делает точку останова в ExecuteOn. - person Arowin; 11.10.2013
comment
Мы замыкаем оценку политик, как только кто-то говорит, что Glimpse отключен. Проверьте журнал Glimpse, чтобы узнать, какая политика отключает Glimpse. - person nikmd23; 15.10.2013
comment
Спасибо, Ник. Просто мысль: как по мне проще реализовать кастомный HttpModule и сделать там все необходимые проверки разрешений. - person Alex; 29.11.2013

Начиная с Glimpse 1.7.0, они добавили лучший способ защиты Glimpse.axd:

http://blog.getglimpse.com/2013/12/09/protect-glimpse-axd-with-your-custom-runtime-policy/

  1. Раскомментируйте код в GlimpseSecurityPolicy.cs (добавляется в ваш проект при выполнении nuget).
  2. Измените httpContext.User.IsInRole("Administrator") на любую релевантную для вас логику

N.B. RuntimeEvent.ExecuteResource в ExecuteOn() обеспечивает запуск этой логики при запросе Glimpse.axd.

person Dunc    schedule 26.10.2015

У меня недостаточно репутации, чтобы комментировать, но я подумал, что необходимо избавить кого-то от следующей ошибки в подробном ответе nikmd23:

<location path="glimpse.axd">
  <system.web>
    <authorization>
      <deny users="*"/><------------
      <allow roles="Admin"/>
    </authorization>
  </system.web>
</location>

Стрелка указывает на то, что deny * будет соответствовать всем пользователям еще до того, как авторизация получит шанс разрешить roles="admin". Измените этот порядок (как показано ниже), чтобы достичь желаемой функциональности.

ссылка: ASP. NET Forms Auth Разрешение доступа к определенному файлу в подкаталоге, когда все остальные должны быть запрещены

<location path="glimpse.axd">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
person aaaaaa    schedule 24.09.2014