gpt4 book ai didi

asp.net-mvc - 禁用生产环境中的 Glimpse 和 glimpse.axd

转载 作者:行者123 更新时间:2023-12-02 02:10:59 27 4
gpt4 key购买 nike

部署到生产环境时如何限制对glimpse.axd 的访问?

我正在使用自定义 RuntimePolicy 来确保在生产中未启用预览,但我想确保用户也不会访问 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>

现在只有管理员角色的用户才能访问Glimpse.axd .

巧合的是,路径不必是 /Glimpse.axd ,这只是默认设置。您可以通过对 web.config 进行一些更改,将 HttpHandler 的位置移动到只有您和您的团队知道的 url。 :

<!-- 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属性(property)。不幸的是,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 并不依赖于该模型,您只需跳过一些步骤即可将其配置为 ATM。

相关说明,我们将是 greatly improving the configuration story Glimpse 2.0 目前正在开发中。

关于asp.net-mvc - 禁用生产环境中的 Glimpse 和 glimpse.axd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com