2011-12-23 14 views
0

我一直在使用MS's AntiXSS library一段時間。最近我決定將我的網站中的textareas改爲純textareas(以前是WYSIWYG),並在換行符上運行br到br的轉換。在C#中,如何在允許HTML輸入的同時阻止XSS,包括br的?

問題是,MS的AntiXSS庫不支持這個功能...它會去掉br的。我不想讓用戶的條目直接進入我的數據庫未經檢查。如果不使用MS AntiXSS庫,在允許HTML輸入(包括br(在C#中))時阻止XSS的可靠方法是什麼?

+1

Html對您的文本進行編碼,然後用
替換新行,然後將其保存到數據庫。禁用此字段上的XSS檢查。你Html編碼它,它是安全的。 (如果我在哪裏,我會在渲染時將其存儲爲原始代碼並進行編碼) – Guillaume 2011-12-23 16:18:10

+0

感謝Guillaume的想法......儘管我使用的是ASP.NET MVC 3(剃鬚刀),但無法弄清楚如何解碼它轉換成HTML視圖。如果我將它存儲爲未編碼,那麼我基本上就是存儲黑客的代碼。 我希望HTML呈現......但保持安全。妄想? :) – Chaddeus 2011-12-26 05:00:14

回答

0

爲了解決這個問題,我決定存儲原始HTML,在存儲它之前在Environment.Newlines<br />之間執行替換。

然後在另一面,當向訪問者顯示時,我使用MS AntiXSS代碼對其進行清理。不是100%是我想要做的理想方式,但是完成了工作。

我在這裏做了一些緩存以確保它在每個請求上都不會通過AntiXSS運行。

+0

這甚至不起作用,因爲AntiXSS將替換您插入的'
'。 – 2012-01-01 19:38:58

+0

是的,它取代'
'與'
',但它仍然適合我的需要(但我希望它會輸出'
'而不是。 – Chaddeus 2012-01-02 02:22:19

0

是否可以獲得AntiXSS輸出的副本?如果是這樣,請通過AntiXSS運行您的輸入,然後替換後面的
並自行存儲數據。

+0

Sry,目前沒有它。一個問題源於AntiXSS的輸出也會移除所有換行符。所以一個簡單的替換是無效的。 – Chaddeus 2011-12-26 04:58:11

1

您可以禁用此字段的AntiXSS,並將來自用戶的輸入直接存儲在數據庫中。 這樣,您就可以在任何輸出上呈現此文本,而不僅僅是HTML。

現在,當你想顯示使用ASP MVC剃刀的HTML頁面上這段文字,你可以使用這樣的事情:

@Html.Encode(Model.MyMultilineTextField).Replace(@"\n", "<br />") 

了Html.Encode將編碼的文本,HTML標籤不解釋, XSS是不可能的。 您可以在Html上添加一個擴展方法,爲您進行轉換(替換)。你也可以處理\ r。

+0

使用'@ Html.Encode()'產生這樣的輸出:'<b>',在視圖中不呈現HTML。 – Chaddeus 2011-12-28 05:13:12

+0

@Chad這就是爲什麼Guillaume在轉義文本後替換換行符*的原因。 – 2012-01-01 19:39:35

相關問題