我应该将Glimpse部署到生产站点吗?


72

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

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

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

我担心的东西包括:

  • 性能
  • 安全漏洞

1
作为更新到这一点,我们发布了一个新的updaet一会儿前,它允许您锁定下来使用更加定制的逻辑- blog.getglimpse.com/2013/12/09/...
anthonyv

Answers:


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),旨在帮助确定何时应允许进行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>

嗨,亚尔克斯,你能告诉我这行在web.config中的什么地方吗?<glimpse on =“ false” xdt:Transform =“ SetAttributes”> </ glimpse>
jaryd 2011年

3
VS2010可以为您的web.config文件创建所谓的“转换文件”。这些在构建时在web.config文件上运行,以便根据所使用的构建配置对其进行修改,以为目标部署做准备。例如,如果您处于发布模式,它将应用来自web.release.config文件的转换。要获取这些文件,只需右键单击web.config并选择。Add Config Transforms有许多教程介绍了这些文件的工作方式以及使用的语法。msdn.microsoft.com/en-us/library/dd465326.aspx
Nick Albrecht

请注意Glimpse/Config已被替换为Glimpse.axd
ckittel

1
@Yarx我不知道该属性是否在(On)之前,但在0.86中是否已启用,所以转换将是:<glimpse enabled =“ false” xdt:Transform =“ SetAttributes”>
Idrees

@Yarx在这里有一个澄清。配置文件转换不是在编译时进行的,而是在发布时进行的。(这会使功能在构建机器的场景中无用)
LosManos

9

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

从安全角度来看,您可以使用上述方法锁定路径。唯一的问题是,瞥见使用了更多的URL端点,因此规则必须是类似的*Glimpse/*(其中*表示在此之前可以发生任何事情,在其之后可以发生任何事情)。一旦到位,瞥见就应该锁定下来。

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


*Glimpse/*在path属性中是不允许的,<location> path attribute must be a relative virtual path. It cannot contain any of '?' ':' '\' '*' '"' '<' '>' or '|'.所以我应该放在哪里?谢谢
彼得

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的安全

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.