部署到生产环境时如何限制对 glimpse.axd 的访问?
我正在使用自定义 RuntimePolicy 来确保在生产中未启用 glimpse,但是我想确保用户也不会使用 axd。
如果我们使用来自 asp.net 的授权,那么我知道我可以通过 web.config 中的位置路径进行保护,但我无法使用此选项。
想法?
部署到生产环境时如何限制对 glimpse.axd 的访问?
我正在使用自定义 RuntimePolicy 来确保在生产中未启用 glimpse,但是我想确保用户也不会使用 axd。
如果我们使用来自 asp.net 的授权,那么我知道我可以通过 web.config 中的位置路径进行保护,但我无法使用此选项。
想法?
Glimpse 提供了几种不同的安全配置机制。
正如您所提到的,第一个是利用 ASP.NET 的内置安全功能。为此,web.config
您可以添加一个<location>
元素,如下所示:
<location path="glimpse.axd">
<system.web>
<authorization>
<deny users="*"/>
<allow roles="Admin"/>
</authorization>
</system.web>
</location>
现在只有Admin角色的用户才能访问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
的请求的 's 。好消息是,您可以更改默认资源。就是这样:Glimpse.axd
IServiceLocator
.更新您web.config
的点 Glimpse 到您的服务定位器实现。
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd" serviceLocatorType="YourNamespace.GlimpseLocator, YourAssembly">
现在 Glimpse 知道您的定位器,并会询问它需要的任何类型,包括默认资源。
IResource
. 我将展示一个示例,说明如何创建一个仅将用户重定向到正常配置页面(不再是默认资源)的示例,但您可以让它做任何您想做的事情。/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
将显示标准配置页面的页面,或者 *Runtime 策略不允许执行名为 'glimpse_config'.* 的资源消息 - 取决于您的IRuntimePolicy
.
因此,就像我说的,我们优化的用例是第一个利用 ASP.NET 内置安全机制的用例。不过,Glimpse 与该模型无关,您只需跳过几圈即可将其配置为 ATM。
在相关的说明中,我们将极大地改进 Glimpse 2.0 中的配置故事,目前正在进行中。
自 Glimpse 1.7.0 以来,他们添加了一种更好的方法来保护 Glimpse.axd:
http://blog.getglimpse.com/2013/12/09/protect-glimpse-axd-with-your-custom-runtime-policy/
httpContext.User.IsInRole("Administrator")
为与您相关的任何逻辑NB RuntimeEvent.ExecuteResource
inExecuteOn()
确保在您请求时运行此逻辑Glimpse.axd
。
我没有足够的声誉发表评论,但我认为有必要在 nikmd23 的彻底回答中将某人从以下错误中拯救出来:
<location path="glimpse.axd">
<system.web>
<authorization>
<deny users="*"/><------------
<allow roles="Admin"/>
</authorization>
</system.web>
</location>
箭头指向的问题是,在授权甚至有机会允许角色 =“管理员”之前,拒绝 * 将匹配所有用户。颠倒此顺序(如下所示)以达到所需的功能。
参考: ASP.NET Forms Auth 允许访问子目录中的特定文件,而所有其他文件都应被拒绝
<location path="glimpse.axd">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>