我从数据库中读取用户配置文件并显示它们。在我向他们展示之前,我通过 php htmlentities 使用 HTML 清理。它正确地显示了它们。但是,虽然允许用户对其进行编辑,但它显示为双重过滤。
echo '<input id="about" name="about" value="'.$php_filtered_value>.'">';
然后在输入中,&符号看起来像&
如果我不过滤变量,则担心 html 注入。
我应该怎么办?
我从数据库中读取用户配置文件并显示它们。在我向他们展示之前,我通过 php htmlentities 使用 HTML 清理。它正确地显示了它们。但是,虽然允许用户对其进行编辑,但它显示为双重过滤。
echo '<input id="about" name="about" value="'.$php_filtered_value>.'">';
然后在输入中,&符号看起来像&
如果我不过滤变量,则担心 html 注入。
我应该怎么办?
我更喜欢遵循 OWASP RULE#2:
> RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML
Requirements:
-Aggressive HTML Entity Encoding
-Only place untrusted data into a whitelist of safe attributes (listed below).
-Strictly validate unsafe attributes such as background, id and name.
然后不要双重转义文本(如:在将其存储到数据库之前一次,然后在回显它之前再次转义)。
Able & Baker
Able & Baker
Able &amp; Baker
相反,只对文本进行一次转义:通常在输出端,而不是在输入端。