問題描述

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