我需要在網頁上顯示一個字符串內容(我沒有控制權)。除了某些有限數量的HTML標籤(強,em,p,br)外,所有東西都應該顯示。這些應該得到尊重,我的理解是可以安全地讓它們不被轉用。其他一切都應該按原樣顯示。.NET中的選擇性HTML編碼(除了某些標籤以外的所有東西)?
令人驚訝的是,大多數HTML Sanitizer都是真正的侵入性,因爲它們適合去除他們認爲是「不安全」的東西。這是爲什麼?他們爲什麼不拖延而不是去掉?我應該保留沿線
var encoded = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode("string content");
var encodedWithSafeTagsReenabled = encoded.Replace("<strong>", "<strong>");
2016年有沒有更清潔,更強大的方式在.NET生態系統中做到這一點?再次,尊重標籤的白名單並保留(編碼,而不是刪除)其他一切?要明確,這將用於將內容放置在網頁上的特定div(我知道編碼應該是基於OWASP XSS備忘單的上下文相關)。
大多數HTML消毒劑依賴於實際構建一個文檔模型,並與節點的工作,而不是試圖裂傷一個字符串。因此,無效HTML必須被移除或以其他方式「固定」,否則構建文檔模型將失敗。 –
謝謝,理解。他們構建DOM或其他任何東西,但我的問題是爲什麼他們最終傾倒到一個字符串時沒有默認編碼?爲什麼他們必須插入並刪除?如果內容甚至不是有效的DOM?我要求他們清理html輸出的任意字符串(不檢查html有效性)。 – Blinky
再次,*他們是如何工作*。當處理類似HTML的東西時,你必須1)使用正則表達式,這是昂貴和容易出錯的,或者2)構造某種內存中基於類的表示來進行修改,然後將其平坦化爲一個字符串。大多數使用HTML的庫選擇第二條路徑,這意味着它們必須依賴*標準*來構建該對象圖。這進一步意味着任何不符合這些標準(無效)的東西都必須丟棄或以其他方式處理。 –