問題描述
我對於 esc_html() 和 wp_kses() 的不同用法感到困惑。我明白,esc_html() 將特殊字元轉換為 HTML 實體,而 wp_kses() 會刪除不需要的標籤 (例如< script>),但我不知道應該在哪些上下文中使用或分開使用。
如果我透過 esc_html() 執行一些不受信任的 HTML,那麼任何 JavaScript 將以純文字形式顯示,而不是由瀏覽器呈現,所以在這一點上是安全的,是否正確?透過 wp_kses() 執行它的唯一原因是避免原始指令碼顯示?
基本上, esc_html() 使它安全,並且 wp_kses() 使它漂亮。那是對的嗎?
最佳解決方案
一般規則,至少 as espoused by Mark Jaquith,在輸入上進行消毒,在輸出上轉義 (這個規則的必然結果早期消毒,逃避遲到) 。
因此,在資料庫中儲存不受信任的資料時使用消毒過濾器 (如 kses()系列),並在模板中輸出不受信任的資料時使用轉義過濾器 (即 esc_*()系列) 。
次佳解決方案
當您希望允許 html 的某個子集在結果中時,應使用 kses 函式。例如,註釋允許其中的一些 HTML 用於粗體,斜體,連結等。
應該使用 esc_html 函式完全轉出 html 。沒有 HTML 將不會被轉換成瀏覽器將被解釋為 non-HTML 的東西。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。