问题描述
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。