我最近将 Glimpse Debugger 包添加到我的项目中。这添加了对 Glimpse dll 的引用,并修改了一些 Web.Config。
在我的开发和生产环境中,我尽可能地喜欢我的项目。
那么将 Glimpse 部署到我的生产站点是否节省/明智,或者我应该创建一个不同的项目(或从我的 csproj 文件创建分支)以仅将其保留在本地?
我担心的事情包括:
- 表现
- 安全漏洞
我最近将 Glimpse Debugger 包添加到我的项目中。这添加了对 Glimpse dll 的引用,并修改了一些 Web.Config。
在我的开发和生产环境中,我尽可能地喜欢我的项目。
那么将 Glimpse 部署到我的生产站点是否节省/明智,或者我应该创建一个不同的项目(或从我的 csproj 文件创建分支)以仅将其保留在本地?
我担心的事情包括:
我相信如果找不到 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>
正如文档所说...
绝不允许 Glimpse 对 Http 响应执行超出
DefaultRuntimePolicy
.
应该注意的是,此转换服务的唯一目的是,如果您想删除在部署过程中使用 Glimpse 的能力。如果您想根据远程请求或授权检查等其他条件有条件地禁用它,最好通过策略来完成。Glimpse 现在基于一系列策略(均基于IRuntimePolicy
)运行,旨在帮助确定何时应允许 glimpse 执行此操作。事实上,一旦安装了 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,但是如果 glimpse 拒绝运行,尽管 cookie 存在,cookie 是没有意义的。话虽如此,仍然建议使用 web.config 中的位置标记将 glimpse.axd 页面包装在授权检查中。请注意,这是对GlimpseSecurityPolicy
上述内容的补充。
<location path="glimpse.axd">
<system.web>
<authorization>
<allow roles="Glimpse" />
<deny users="*" />
</authorization>
</system.web>
</location>
Yarx 在几乎所有方面都是正确的。
从安全角度来看,您可以使用所描述的方法锁定路径。唯一的问题是,glimpse 使用了更多的 URL 端点,因此规则需要类似于*Glimpse/*
(其中 * 表示任何东西都可以在它之前,任何东西都可以在它之后)。一旦这到位,一瞥应该被完全锁定。
此外,如果在配置中使用了 Yarx 提供的转换,即使打开了 cookie,glimpse 也永远不会加载。
从 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 前进的道路。