我最近将Glimpse Debugger软件包添加到了我的项目中。这增加了对Glimpse dll的引用,并修改了一些Web.Config。
我在开发和制作环境中尽可能地喜欢我的项目。
将Glimpse部署到我的生产站点是否节省/明智,或者我应该创建一个不同的项目(或从我的csproj文件创建分支)以仅保留在本地?
我担心的事情包括:
答案 0 :(得分:105)
我相信如果找不到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
),旨在帮助确定何时允许一瞥这样做。事实上,一旦安装了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中的位置标记将glimpse.axd页面包装在授权检查中。请注意,这是上述GlimpseSecurityPolicy
的补充。
<location path="glimpse.axd">
<system.web>
<authorization>
<allow roles="Glimpse" />
<deny users="*" />
</authorization>
</system.web>
</location>
答案 1 :(得分:9)
Yarx在各方面都是正确的。
从安全角度来看,您可以使用所描述的方法锁定路径。唯一的问题是,可以看到更多的URL端点,因此规则需要类似于*Glimpse/*
(其中*表示任何东西都可以在它之前,任何东西都可以在它之后)。一旦到位,瞥见应该被锁定。
此外,如果在配置中,您使用了Yarx提供的转换,即使您打开了cookie,也不会加载glimpse。
答案 2 :(得分:1)
从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
。请参见下面的Securing Glimpse.axd the way forward。