簡體   English   中英

一些 HTML 標簽在被 XSS 轉義后取消轉義

[英]unescaping some HTML tags after they've been escaped for XSS

我有 html 存儲在數據庫中,我需要 output 到頁面。

  • 如果我不使用 escape() 它,我會得到我想要的粗體格式,但我冒着從未轉義的 html 源獲取 XSS 的風險。
  • 如果我 escape() 它,那么它會顯示原始 html 代碼<b>bold text</b>而不是粗體文本

除了一些標簽,我怎樣才能逃避一切? 我正在考慮應用 escape(),然后搜索<b></b>並取消轉義它們。 那行得通嗎? 您看到任何安全問題嗎? 我也不確定如何搜索<b></b>標簽。 正則表達式可能還是什么?

PS escape() 我的意思是Zend中的function。 我相信它相當於htmlspecialchars()

如果數據庫中的 HTML 標記來自您不信任的用戶,您應該讓他們訪問markdown或類似的“安全”編輯環境,這樣他們就可以准備他們想要的標記,並且不允許注入 HTML。

執行選擇性過濾的嘗試經常是錯誤的,並且會錯過攻擊者注入惡意代碼的方式。 所以不要讓他們寫原始的 HTML。

htmlspecialchars_decode()htmlspecialchars()相反。 可以取消轉義,但沒有限制標簽的參數。

如果html是由用戶編寫的,這是個壞主意:)

取消轉義是通往 go 的方法。 如果您只將幾個要從 html 逃逸轉換回來的標簽列入白名單,那么您將不會遇到 XSS 漏洞。

正如許多失敗的 BBcode 解析器所證明的那樣,變通方法標記對此沒有任何優勢。

(與其來回轉換,不如使用 HTMLPurifier 來代替。)

您可以使用 HTMLPurifier 庫,它會處理您需要對 escaping 等進行的所有操作。 這是一個很好的視頻,解釋了如何將它安裝到 zend 框架中

http://www.zendcasts.com/htmlpurifier-integration/2011/05/

嘗試在第二個參數中使用strip_tags是 $allowable_tags

使用Zend_Filter_StripTags class 並作為構造函數的參數使用具有以下鍵的數組:

  1. 'allowTags' => 允許的標簽
  2. 'allowAttribs' => 允許的屬性

第二部分允許您修剪所有不需要的屬性,如“onClick”等,它們可能與<script>代碼一樣危險,但您可以為<img>保留“src”或為<a>保留“href”

創建您自己的視圖助手,或者您也可以在 controller 中使用 setEscape() 請參閱http://framework.zend.com/manual/en/zend.view.scripts.html#zend.view.scripts.Z53466CZF871

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM