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

时间:2011-04-21 15:42:17

标签: asp.net-mvc-3 glimpse

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

我在开发和制作环境中尽可能地喜欢我的项目。

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

我担心的事情包括:

  • 性能
  • 安全漏洞

3 个答案:

答案 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