我刚刚遇到在PHP中构建一个CRUD应用程序,讲师提醒我们使用htmlentities()以避免HTML 注入,然后他说htmlentities不应在您的代码中多次调用,我的问题很简单……为什么?
干杯
我刚刚遇到在PHP中构建一个CRUD应用程序,讲师提醒我们使用htmlentities()以避免HTML 注入,然后他说htmlentities不应在您的代码中多次调用,我的问题很简单……为什么?
干杯
因为在相同的值上再次调用它可以对其进行双重编码。
以PHP 文档中的示例为例:
$str = "A 'quote' is <b>bold</b>";
$firstEntity = htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
现在,如果我们htmlentities()
再次运行它,它将对第一次htmlentities()
调用创建的 & 符号进行编码,您最终将得到一个双重编码的字符串:
$secondEntity = htmlentities($firstEntity);
// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
关于转义,有两件重要的事情需要了解:
htmlentities('1 > 2')
会给你1 > 2
,但是htmlentities(htmlentities('1 > 2'))
会给你1 &gt; 2
。说“只在一个地方做”是记住这两件事的一种方式:如果你只在输出时立即做,你就不会意外地双重转义同一个字符串,也不会应用错误的转义对于您将在其他地方使用的字符串。