2017-02-24 92 views
0

我想保護我的ASP.NET MVC 5應用程序免受跨站點腳本(XSS)的攻擊。我已經經歷了幾篇文章,所以SO帖子。理想的選擇是對輸入進行編碼,並在輸入重新顯示時進行編碼。從XSS保護ASP.NET MVC 5應用程序

但是,默認情況下,MVC會阻止任何包含HTML標記的請求,以避免XSS攻擊。默認情況下,如果請求中檢測到潛在危險的內容,則ASP.NET 4.5將引發異常。

在某些合法情況下,用戶提交標記是完全可以接受的。但我的應用程序有這樣的情況,用戶需要輸入標記。

如果我在輸入字段中輸入任何標記,asp.net將按預期拋出異常。 話雖如此,我真的仍然需要編碼輸入或它已經由asp.net 5照顧?

回答

0

當發佈任何帶有HTML的輸入字段時,ASP.NET MVC將引發異常。 您需要在特定輸入上添加AllowHtml屬性。例如:

public class Post 
{ 
    public string Title {set;get;} 
    [AllowHtml] 
    public string Content { set;get;} 
} 

當顯示這個領域,你需要使用@按照文檔:

https://docs.microsoft.com/en-us/aspnet/core/security/cross-site-scripting

MVC中使用的剃刀引擎自動編碼從變量來源 所有輸出,除非你真的很難阻止它這樣做。無論何時使用@指令,它都使用HTML屬性編碼規則。 由於HTML屬性編碼是HTML編碼的超集,這意味着 您不必關心是否應使用HTML 編碼或HTML屬性編碼。您必須確保在HTML上下文中僅使用 @,而不是在嘗試將不可信輸入 直接插入到JavaScript中時使用。標籤幫助程序還將對標籤參數中使用 的輸入進行編碼。