Why should I use the esc_url?

时间:2015-09-12 作者:IXN

这使得我的编码很困难。Wordpress codex通过含糊其辞地谈论安全性来解释使用esc\\U url的原因。但这真的值得麻烦吗?

例如,使用

<?php echo esc_url( home_url( \'/\' ) ); ?>
而不是

<?php echo home_url() ?>
附言:我说的不是主题开发,而是一个特定的网站。

4 个回复
最合适的回答,由SO网友:Rarst 整理而成

如果您查看Data Validation 关于功能,它有以下说明:

清理url(在文本节点、属性节点或其他任何位置)时,始终使用esc\\u url。拒绝没有提供的白名单协议之一的URL[…],消除无效字符,并删除危险字符。

这就是实际的安全优势。协议有效,无模糊字符。

关于必要性的答案是yes. 转义输出是最基本的安全实践。

SO网友:Tomer W

好吧,所有用户输入都应该被清理。。。如果您注入的url不是用户输入(例如,您完全信任的人的站点设置、硬编码值),则您可以从esc url中释放自己。

但如果我可以将该url注入到您的站点,我就可以轻松地注入js代码或重定向代码。。。或者在某些情况下甚至是服务器端代码。

这可能会导致会话劫持、用户帐户被盗以及其他错误选项。

编辑:

在您的示例中esc_url( home_url( \'/\' ) );
它在半硬编码值上运行!因此esc_url 可以消除<尽管如此,我仍然不明白为什么要区分何时存在威胁和何时没有威胁,通常建议为每个值保留esc\\u url()。

SO网友:MD MUSA

还有一件事你必须牢记在心esc_url() 是为了<a href="SANITIZE_THIS_URL">your_text</a>.如果要在HTML输出中使用URL,如a href属性表示链接,或src属性表示图像元素,则应使用esc_url().

esc_url_raw()对于其他情况,您需要一个干净的URL,但不希望对HTML实体进行编码。因此,任何非HTML用法(DB、重定向)都会使用此选项。

这个esc_url_raw() 函数的作用与esc_url(), 但它不会解码实体,这意味着它不会取代&;带(&A)#038等等。正如马克所指出的,使用它是安全的esc_url_raw() 在数据库查询中,重定向和HTTP函数,如“wp\\u remote\\u get()”,了解有关esc_url_raw()

SO网友:matthew

esc_url 用于生成有效的HTML(而不是清理输入)。如果您不能百分之百确定要输出的内容是该上下文的有效HTML,则应在任何时候使用此选项。

相关推荐

Contact Form Security

在Wordpress中构建我自己的联系人表单。除了典型的电子邮件etc验证和可能的验证码之外,我还需要考虑任何其他安全步骤。我没有向数据库发送任何数据。