2011-04-21 46 views
72

我最近在我的项目中添加了Glimpse Debugger包。这添加了对Glimpse dll的引用,并修改了一些Web.Config。我应该将Glimpse部署到生产站点吗?

我喜欢我的项目尽可能在我的开发和生产环境相同。

因此,将Glimpse部署到我的生产站点,还是应该创建一个不同的项目(或从我的csproj文件创建分支)以保持它只在本地?

的东西,我很担心包括:

  • 性能
  • 安全漏洞
+1

作为对此的更新,我们刚刚发布了一个新的updaet,它允许您使用更多自定义逻辑来锁定事物 - http://blog.getglimpse.com/2013/12/09/protect- glimpse-axd-with-your-custom-runtime-policy/ – anthonyv 2014-02-15 21:41:53

回答

103

我相信如果掠影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> 

UPDATE:掠影最近出现了一些变化和(自1.0我相信?)变换现在看起来如下。试图设置enabled属性会在最新版本的Glimpse中出现配置错误。

<glimpse defaultRuntimePolicy="Off" xdt:Transform="SetAttributes"> 
</glimpse> 

由于文档所说的那样......

掠影永远不会被允许在指定的DefaultRuntimePolicy比 HTTP响应做多。

应该指出的是,这个转换服务的唯一目的是如果你想删除在部署过程中使用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.axd页。Cookie仍然可以从我可以告诉的内容中启用,但如果浏览器拒绝运行cookie,则cookie无意义,但Cookie无效。这就是说,建议使用web.config中的位置标记在授权检查中封装glimpse.axd页面。请注意,除了上面的GlimpseSecurityPolicy之外。

<location path="glimpse.axd"> 
    <system.web> 
    <authorization> 
     <allow roles="Glimpse" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</location> 
+0

嗨Yarx,你能告诉我在web.config这行里去了吗? phreak3eb 2011-04-22 15:16:24

+3

VS2010能够为您的web.config文件创建它所谓的“变形文件”。并且这些文件会在构建时在您的web.config文件中运行,以便根据所使用的构建配置对其进行修改,以便为目标部署做准备。例如,如果您处于发布模式,它会应用web.release.config文件中的转换。要获取这些文件,只需右键单击web.config并选择“添加配置转换”有许多教程解释这些文件的工作方式以及使用的语法。 http://msdn.microsoft.com/en-us/library/dd465326.aspx – 2011-04-26 16:04:33

+0

请注意,'Glimpse/Config'已被替换为'Glimpse.axd'。 – ckittel 2011-08-23 21:22:47

9

Yarx几乎所有的战线都是正确的。

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

另外,如果在配置中,您使用了Yarx提供的转换,即使您启用了cookie,glimpse也不会加载。

+0

'* Glimpse/*'不允许在路径属性'中路径属性必须是相对虚拟路径。它不能包含任何'?' ':''''''''''''<' '>'或'|'。'我应该放在哪里?谢谢 – Peter 2014-03-07 11:59:18

0

从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