c# - 我如何使 Umbraco 与 NWebSec 的内置 CSP 报告事件处理程序配合得很好?

标签 c# asp.net-mvc umbraco nwebsec

我正在使用 Umbraco CMS 版本 7 的网站上工作。我正在使用 NWebSec 在网站上实现 CSP header 。 NWebSec 内置了在违反 CSP 时引发 .Net 事件的功能。通常你会用这样的东西来捕捉那个事件:

protected void NWebSecHttpHeaderSecurityModule_CspViolationReported(object sender, CspViolationReportEventArgs e)
    {
        var report = e.ViolationReport;
        var serializedReport = JsonConvert.SerializeObject(report.Details);

        // Do a thing with the report
    }

在 Global.asax.cs 文件中。但据我所知,Umbraco 抢占了 Global.asax.cs 文件,并且它吃掉了任何抛出的事件。我有一个包含一些自定义事件处理程序的文件,例如:

public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)

处理通常位于 Global.asax.cs 文件中的应用程序启动代码的标准片段,但将 NWebSec 事件处理程序放在同一文件中不起作用。大概是因为它使用的是 .Net 事件处理程序语法,而不是 Umbraco 替换它的任何语法。

如何访问 NWebSec 抛出的事件?

最佳答案

Global.asax 类继承自 UmbracoApplication 所以不,你不能使用它。这有很多原因,包括启用在 web 上下文之外“运行”Umbraco 的能力——即在控制台应用程序中)。

在查看 NWebSec 文档网站上的可用文档后,我认为您不能只将 NWebSecHttpHeaderSecurityModule_CspViolationReported 事件处理程序方法放在类中,您还需要将其连接起来。它应该看起来像这样:

public class MyGlobalEventHandler : ApplicationEventHandler {

    protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        var nWebSecHttpHeaderSecurityModule = umbracoApplication.Modules["NWebSecHttpHeaderSecurityModule"] as HttpHeaderSecurityModule;
        if (nWebSecHttpHeaderSecurityModule != null) {
            nWebSecHttpHeaderSecurityModule.CspViolationReported += NWebSecHttpHeaderSecurityModule_CspViolationReported;
        }

        base.ApplicationStarted(umbracoApplication, applicationContext);
    }

    protected void NWebSecHttpHeaderSecurityModule_CspViolationReported(object sender, CspViolationReportEventArgs e)
    {
        var report = e.ViolationReport;
        var serializedReport = JsonConvert.SerializeObject(report.Details);

        // Do a thing with the report
    }
}

如果您使用支持 OWIN (7.3.0) 的较新版本的 Umbraco,您可以使用 NWebsec.Owin 库,它可能会给您带来更好的结果和更大的灵 active 。

关于c# - 我如何使 Umbraco 与 NWebSec 的内置 CSP 报告事件处理程序配合得很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287924/

相关文章:

regex - IIS-URL 重写,URL 规则为小写,除了查询字符串

c# - 在多节点树选择器中获取 child 的名字

c# - Azure 云服务上的 Umbraco 7.0.2 - 访问路径 'E:\sitesroot\1\config\applications.config' 被拒绝

c# - 每次我运行 visual studio c# 应用程序时,Access 2007 中的所有记录都会删除

c# - 如何确保我不会丢失来自 TCP 的数据?

asp.net-mvc - 具有自定义身份验证的自定义AuthorizeAttribute

asp.net-mvc - 与 jquery ajax 序列化的模型绑定(bind)不起作用

html - 在 img 源属性 (Umbraco) 中插入媒体 url 时出现 CS1502 错误

c# - .NET Core Web API 路由模板中的可选参数

c# - 如何使用 log4net 记录 EF 生成的 SQL