并非所有符合条件的编码都使用htmlentities

时间:2013-05-22 08:17:28

标签: php xss html-entities

我正在使用PHP 5.3.6并使用HTML实体编码一些POST数据。但是,括号和%不会对其等效实体进行编码。

网络安全团队告诉我们,这些字符必须编码,因为它们可能会用于XSS攻击。

发布的数据:

paren ( ) & % won't encode

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

输出:

paren ( ) & % won't encode

正如您所见,()%未受影响。

提前致谢。

CNC中 这就是我最终使用的工作。感谢。

function stripcustomchars($encode_chars) {  
    $searches = array('%','(',')');  
    $replacements = array("%","(",")");  
    $encoded = str_replace($searches, $replacements,$encode_chars);  
    return $encoded;
}

2 个答案:

答案 0 :(得分:1)

  

网络安全团队告诉我们,这些字符必须编码,因为它们可能会用于XSS攻击。

如果要将数据插入HTML(而不是像JavaScript),那么对于<>&以外的任何内容,情况都是如此, "'(尽管即使那些可能有些过分,也取决于具体情况)。对于大多数情况,htmlspecialchars就足够了(尽管要注意旧的IE及其UTF-7漏洞)。

如果要将数据插入HTML以外的其他内容(例如URI或JavaScript),则需要使用目标语言的编码例程,而不是HTML的编码例程。 (尽管您可能需要在之后使用HTML编码,然后将其插入HTML(例如,将用户数据转换为JavaScript到HTML脚本元素中)。)

答案 1 :(得分:0)

圆括号和百分号是HTML中的不是特殊字符,它们没有特殊含义。因此,htmlentities不接触它们。如果您仍然想要对它们进行编码,则需要手动str_replace它们。但同样,在纯HTML环境中这样做毫无意义。