2015-07-10 39 views
0

我有一個字符串,其中包含有效的html標記,如<table><br/>,並顯示在包含數據庫的工具提示中。安全團隊認爲這是一個關鍵問題,因爲這可能會允許來自用戶的xss攻擊,它會插入一個<script> alert(...)c#編碼字符串以防止XSS注入(RegEx ??)

在網絡上的任何地方,我被告知要使用HttpUtility.HtmlEncode()。問題是這也是編碼我的有效標籤。

我在找什麼,我找不到是RegEx,它允許我過濾xss注入而不剝離我有效的html標籤。

是否有這樣的事情存在?

+4

您需要在_before_頁面的_data_部分上使用'HtmlEncode'來組裝輸出字符串。嘗試着明確輸出的哪些部分是格式化的,哪些部分來自數據庫,但事實並不順利。 – HABO

+1

用戶提供的文本是否爲html?或者你用html包裝用戶文本? – dman2306

+1

我們通常禁止用戶輸入HTML。如果我們需要給用戶輸入格式化指令的能力,那麼我們將把MarkDown處理器連接到特定的字段。 –

回答

0

應該很簡單,HTML編碼整個事情,然後用正則表達式與<table>取代的&lt;table&gt;所有實例等。一個例子正則表達式是"&lt;(\/?(table|span|p|br|tr|td|th|thead|tbody|tfoot|b|i)\s*\\?)&gt;",並以「< \ 1>」

這應該讓更換你很近。當然,它不會允許複雜的標籤,如<table id=...>等,但您將不得不決定是否這是一個要求。或者使用降價編輯器。

+0

這正是我試圖做的,但我決定不去這樣,因爲我有很多屬性到我的標籤:( –

+0

爲什麼你有很多屬性(或任何)在用戶提供的標籤屬性? –

+0

聽起來像你有一個流程問題,你應該在合併你提供的任何東西之前清理用戶提供的部分,你也可以考慮不把HTML放到數據庫中,而是在你檢索它們後改變佔位符。如果需要在以後進行更改,可以輕鬆地更新/更改您的部分存儲將如下所示:'某些用戶提供的數據<! - MyControlType1 - >更多用戶數據<! - MyControlType2 - >' ,然後從數據庫中取出註釋。 –