73

我最近将 Glimpse Debugger 包添加到我的项目中。这添加了对 Glimpse dll 的引用,并修改了一些 Web.Config。

在我的开发和生产环境中,我尽可能地喜欢我的项目。

那么将 Glimpse 部署到我的生产站点是否节省/明智,或者我应该创建一个不同的项目(或从我的 csproj 文件创建分支)以仅将其保留在本地?

我担心的事情包括:

  • 表现
  • 安全漏洞
4

3 回答 3

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>

正如文档所说...

绝不允许 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>
于 2011-04-21T15:51:24.550 回答
9

Yarx 在几乎所有方面都是正确的。

从安全角度来看,您可以使用所描述的方法锁定路径。唯一的问题是,glimpse 使用了更多的 URL 端点,因此规则需要类似于*Glimpse/*(其中 * 表示任何东西都可以在它之前,任何东西都可以在它之后)。一旦这到位,一瞥应该被完全锁定。

此外,如果在配置中使用了 Yarx 提供的转换,即使打开了 cookie,glimpse 也永远不会加载。

于 2011-04-21T18:38:09.923 回答
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. 见底部:确保 Glimpse.axd 前进的道路

于 2016-04-18T18:12:40.917 回答