問題描述
WP 原始碼顯示,wp_filter_kses 和 wp_filter_post_kses 都傳遞了 「預期以斜線轉義」 的資料。
另一方面,wp_kses_data 傳遞的資料 「預期不被轉義」,wp_kses_post 的程式碼看起來像 wp_kses_data 。
將這些功能的資料傳遞給未知資料 (以斜線方式轉義) 的安全性如何?
第一組可以優於第二組還是更喜歡第二組更安全?
或者這是一個您絕對需要知道資料的條件的削減的情況?
–update–
我現在在想,如果你不知道資料是否被轉義,你可以使用 wp_kses_data( stripslashes_deep( $data ) ); 並執行返回,如果你需要轉義最後的 addslashes() 。
最佳解決方案
從抄本:
wp_filter_kses should generally be preferred over wp_kses_data because wp_magic_quotes escapes $_GET, $_POST, $_COOKIE, $_SERVER, and $_REQUEST fairly early in the hook system, shortly after ‘plugins_loaded’ but earlier then ‘init’ or ‘wp_loaded’.
然後首選。更多的問題是,「剝離斜線更安全嗎?」 他們都使用相同的允許的 HTML 。嗯,這絕對取決於絕對的情況,但我認為這樣做比較安全。
基本用途:
$filtered = wp_kses($unfiltered, $allowed_html, $allowed_protocols);
所有的 wordpress kses 函式然後只是做
$filtered = wp_kses($unfiltered, $allowedtags);
所以:
$filtered = wp_kses_data($unfiltered);
$filtered = wp_filter_kses($unfiltered); // does the same, but will also slash escape the data
post 變體使用不同的標籤集合; 允許由 non-admins 使用的那些。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。