2015-10-22 47 views
1

我正在使用Umbraco CMS版本7的網站上工作。我正在使用NWebSec在網站上實施CSP標題。當有CSP違規時,NWebSec內置了可以引發.Net事件的功能。通常情況下,你會發現類似這樣的事件:如何讓Umbraco與NWebSec內置的CSP報告事件處理程序一起玩呢?

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事件處理程序在同一文件doens't工作。推測這是因爲它使用.Net事件處理程序的語法,而不是Umbraco用它來替代它。

如何訪問NWebSec引發的事件?

回答

5

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 
    } 
} 

如果您使用一把umbraco支持OWIN(7.3.0)的新版本,你可以使用NWebsec.Owin庫,可以給你一個更好的結果和更大的靈活性也許。

+0

我最終走了一條不同的路線,使用更加標準的CSP報告結構和自定義路線,並使用mvc控制器處理它。但它看起來像你作爲一個umbraco應用程序接線nwebsec的答案是我失蹤使這項工作的一塊。謝謝。 – Necoras

相關問題