我最近将Glimpse Debugger软件包添加到了我的项目中。这添加了对Glimpse dll的引用,并修改了一些Web.Config。
在开发和生产环境中,我尽可能地喜欢我的项目。
因此,将Glimpse部署到我的生产站点是否是节省/明智的选择,还是应该创建一个不同的项目(或从csproj文件创建分支)以仅将其保留在本地?
我担心的东西包括:
- 性能
- 安全漏洞
Answers:
我相信,如果找不到用于Glimpse的Cookie,它就不会加载或执行任何操作,因此性能应该可以忽略不计。在安全方面,您可以在web.config中为瞥见路径的位置设置用户限制。
<location path="Glimpse.axd" >
<system.web>
<authorization>
<allow users="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
或者,如果有管理员角色,则可以按角色(而不是用户名)进行操作。
如果您不想仅依靠cookie的存在,也可以将其关闭。这可以通过web.config转换轻松实现,我还没有测试过标记,但是类似的东西应该可以工作。
<glimpse enabled="false" xdt:Transform="SetAttributes">
</glimpse>
更新:Glimpse最近已经看到了一些更改,并且(我相信从1.0开始?)现在的转换如下。尝试设置该enabled
属性将在最新版本的Glimpse中给出配置错误。
<glimpse defaultRuntimePolicy="Off" xdt:Transform="SetAttributes">
</glimpse>
正如文档所述...
对于Http响应,绝不能允许Glimpse进行超过中指定的操作
DefaultRuntimePolicy
。
应该注意的是,此转换的唯一目的是,如果您要删除在部署过程中使用Glimpse的功能。如果要基于其他条件(例如,远程请求或授权检查)有条件地禁用它,则最好通过策略来完成。Glimpse现在基于一系列策略运行(全部基于IRuntimePolicy
),旨在帮助确定何时应允许进行Glippse操作。实际上,一旦安装了Glimpse,如果您导航至glimpse.axd,则在该页面底部,您将看到当前启用的策略列表。例如LocalPolicy
阻止远程请求访问它(可配置地,可以通过web.config忽略任何策略以允许远程请求),例如http://getglimpse.com/Help/Configuration。它们还具有一个名为的示例类GlimpseSecurityPolicy
,当您使用Nuget安装Glimpse时将包含该类,您可以使用该类添加授权限制。
public class GlimpseSecurityPolicy:IRuntimePolicy
{
public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
{
// You can perform a check like the one below to control Glimpse's permissions within your application.
// More information about RuntimePolicies can be found at http://getglimpse.com/Help/Custom-Runtime-Policy
var httpContext = policyContext.GetHttpContext();
if (httpContext.User != null && !httpContext.User.IsInRole("Glimpse")) //Once glimpse is turned on, you have to be a member of this Role to see the Glimpse Panel.
{
return RuntimePolicy.Off;
}
return RuntimePolicy.On;
}
public RuntimeEvent ExecuteOn
{
get { return RuntimeEvent.EndRequest; }
}
}
现在,使用这些策略来确定何时应运行glimpse,但是它们并不能阻止用户打开glimpse.axd页面。我可以说的话,仍然可以启用cookie,但是如果瞥见尽管存在cookie,但拒绝运行,则cookie是没有意义的。话虽如此,仍然建议使用web.config中的location标签将glimpse.axd页面包装在授权检查中。请注意,这是GlimpseSecurityPolicy
上面的补充。
<location path="glimpse.axd">
<system.web>
<authorization>
<allow roles="Glimpse" />
<deny users="*" />
</authorization>
</system.web>
</location>
Add Config Transforms
有许多教程介绍了这些文件的工作方式以及使用的语法。msdn.microsoft.com/en-us/library/dd465326.aspx
Glimpse/Config
已被替换为Glimpse.axd
。
Yarx在几乎所有方面都是正确的。
从安全角度来看,您可以使用上述方法锁定路径。唯一的问题是,瞥见使用了更多的URL端点,因此规则必须是类似的*Glimpse/*
(其中*表示在此之前可以发生任何事情,在其之后可以发生任何事情)。一旦到位,瞥见就应该锁定下来。
另外,如果在配置中使用了Yarx提供的转换,即使打开了cookie,瞥见也将永远不会加载。
*Glimpse/*
在path属性中是不允许的,<location> path attribute must be a relative virtual path. It cannot contain any of '?' ':' '\' '*' '"' '<' '>' or '|'.
所以我应该放在哪里?谢谢
从Glimpse 1.7开始~/glimpse.axd
,您可以采用一种更通用的方式来保护自己,并为所有人使用相同的策略带来更多好处。您只需要确保也需要为资源调用您的自定义策略:
public RuntimeEvent ExecuteOn
{
// The bit flag that signals to Glimpse that it should run on either event
get { return RuntimeEvent.Endrequest | RuntimeEvent.ExecuteResource; }
}
请注意| RuntimeEvent.ExecuteResource
。请参阅以下内容的底部:确保Glimpse.axd的安全。