![](/img/trans.png)
[英]How can HTML tags only be escaped in code and some tags not being escaped?
[英]unescaping some HTML tags after they've been escaped for XSS
我有 html 存儲在數據庫中,我需要 output 到頁面。
<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 框架中
嘗試在第二個參數中使用strip_tags是 $allowable_tags
使用Zend_Filter_StripTags class 並作為構造函數的參數使用具有以下鍵的數組:
第二部分允許您修剪所有不需要的屬性,如“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.