問題描述
get_template_directory_uri()是否應使用 esc_url()進行轉義?
我問,因為從預設主題 Twenty 十五的一個例子,相同的功能在兩個不同的地方使用,但只有一個是逃脫。
wp_enqueue_style( 'twentyfifteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfifteen-style' ), '20141010' );
–
<script src="<?php%20echo%20esc_url(%20get_template_directory_uri()%20);%20?>/js/html5.js"></script>
我會說,不需要生成 get_template_directory_uri(),因為 URL 不能在外部操作。
最佳解決方案
在這個功能中,我們發現一個鉤子:
return apply_filters(
'template_directory_uri',
$template_dir_uri,
$template,
$theme_root_uri
);
所以,是的,URI 可以透過外掛更改,你應該轉義它返回的值。
同樣的原則適用於所有 WordPress URI 函式,如 get_home_url(),get_site_url()等。請記住,不僅有好的外掛開發人員。有些會犯錯誤,也許只是在某些情況下才發生的很小的錯誤。
在 wp_enqueue_style()的情況下,預設情況下 WordPress 會轉義該 URL 。但這是全球 WP_Styles 例項的封裝,而這又是 can be replaced easily – 即使使用較不安全的版本。這不太可能,但你應該意識到這種可能性。
不幸的是,WP 本身並沒有遵循比對不起的指令更好的安全。它甚至不能逃脫翻譯。我的建議不是看最佳實踐的核心主題。始終檢視資料的來源,看看它是否可以被洩露。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。