Answers:
如果您查看有关“ 数据验证”的文档,则该函数将说明以下内容:
清理URL(在文本节点,属性节点或其他任何地方)时,请始终使用esc_url。拒绝没有提供的白名单协议之一的URL,消除无效字符,并除去危险字符。
在那里,您将获得–实际的安全优势。有效协议,没有模糊字符。
关于必要性的答案肯定是肯定的。转义输出是最基本的安全措施。
好吧,应该清除所有用户输入的内容...如果您输入的网址不是用户输入的内容(例如,您完全信任的人进行的网站设置,硬编码的值),则可以使自己摆脱esc-url的困扰。
但是,如果我可以将该网址注入您的网站,则在某些情况下,我可以轻松注入js代码,重定向代码...甚至服务器端代码。
这可能会导致会话劫持,用户帐户被盗以及其他不良选择。
在您的示例中,esc_url( home_url( '/' ) );
它以半硬编码值运行!因此esc_url
可以消除。
话虽如此,我仍然不明白为什么要在有威胁和无威胁之间进行区分,通常建议对每个值都保留esc_url()。
如果您要在HTML输出中使用该URL,esc_url()
则必须牢记另一件事
<a href="SANITIZE_THIS_URL">your_text</a>
,例如,要为链接使用href属性,对于图像元素使用src属性,则应使用esc_url()
。
esc_url_raw()
用于您想要一个干净的URL但又不想对HTML实体进行编码的其他情况。因此,任何非HTML用法(数据库,重定向)都将使用此方法。
该esc_url_raw()
函数的功能与几乎相同esc_url()
,但不会解码实体,这意味着它将不会用&#038替换&等。正如Mark所指出的,esc_url_raw()
在esc_url_raw()的更多信息中,可以安全地用于数据库查询,重定向和HTTP函数(如“ wp_remote_get()” )中。