5

对于任何 XSS 攻击,我一直使用简单htmlentities($_POST['string']);的数据清理方法。最近我看到人们使用这个:

htmlentities($_POST['string'], ENT_QUOTES, 'UTF-8');

使用它的好处或目的是什么htmlentities()

也不知道它是否相关,但我总是在页面顶部使用元 UTF-8。

4

2 回答 2

12

ENT_QUOTES如果数据被替换为 HTML 属性,则需要,例如

echo '<input type="text" value="' . htmlentities($string, ENT_QUOTES) . '">";

这可确保对引号进行编码,因此它们不会value="..."过早终止该属性。

UTF-8如果您的页面使用 UTF-8 字符集,则这是必需的,因为默认情况下使用 ISO-8859-1 编码。这些编码需要匹配,否则用户会看到奇怪的字符。

于 2013-06-01T07:26:22.380 回答
0

人们陈述字符编码和实体引号的原因是

  the encapsulation characters ' and " are encoded (ENT_QUOTES) 

and 'UTF-8' encoding flag expressed as:
   htmlentities($_POST['string'], ENT_QUOTES, $encoding="UTF-8");
or
  htmlentities($_POST['string'], ENT_QUOTES, "UTF-8");

在整个声明中。

在过滤器中表达字符编码的主要原因是为了维护输入数据的帧引用。如果传输编码由于传输干扰或恶意传输数据包更改而改变,过滤器将用零填充丢失的数据。

于 2019-12-15T00:23:54.063 回答