繁体   English   中英

PHP - 在您的代码中有多个 htmlentities()

[英]PHP - Having more than one htmlentities() in your code

我刚刚遇到在PHP中构建一个CRUD应用程序,讲师提醒我们使用htmlentities()以避免HTML 注入,然后他说htmlentities不应该在您的代码中多次调用,我的问题很简单……为什么?

干杯

因为在相同的值上再次调用它可以对其进行双重编码。

PHP 文档为例:

$str = "A 'quote' is <b>bold</b>";

$firstEntity = htmlentities($str);
// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

现在,如果我们再次通过htmlentities()运行它,它将对第一个htmlentities()调用创建的 & 符号进行编码,您最终将得到一个双编码字符串:

$secondEntity = htmlentities($firstEntity);
// Outputs: A 'quote' is &amp;lt;b&amp;gt;bold&amp;lt;/b&amp;gt;

关于 escaping,有两件重要的事情需要了解:

  • 您不应该在相同的值上运行相同的转义 function 两次 例如htmlentities('1 > 2')会给你1 &gt; 2 1 &gt; 2 ,但htmlentities(htmlentities('1 > 2'))会给你1 &amp;gt; 2 1 &amp;gt; 2 .
  • 您应该只在将数据发送到某处时运行转义函数。 在 HTML escaping 的情况下,您应该在发送到浏览器时执行此操作,而不是在保存到数据库时或在应用程序中某处组合不同字符串时执行此操作。 如果你不这样做,你实际上并不知道正确的逃逸 function 使用,并且很可能最终导致数据损坏,甚至引入新的漏洞。

说“只在一个地方做”是记住这两件事的一种方式:如果你在 output 它的时候立即做,你就不会意外地双重转义同一个字符串,也不会应用错误的 escaping对于您将在其他地方使用的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM