問題描述

WP 源代碼顯示,wp_filter_kseswp_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。