我正在使用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;
}
答案 0 :(得分:1)
网络安全团队告诉我们,这些字符必须编码,因为它们可能会用于XSS攻击。
如果要将数据插入HTML(而不是像JavaScript),那么对于<
,>
,&
以外的任何内容,情况都是如此, "
和'
(尽管即使那些可能有些过分,也取决于具体情况)。对于大多数情况,htmlspecialchars
就足够了(尽管要注意旧的IE及其UTF-7漏洞)。
如果要将数据插入HTML以外的其他内容(例如URI或JavaScript),则需要使用目标语言的编码例程,而不是HTML的编码例程。 (尽管您可能需要在之后使用HTML编码,然后将其插入HTML(例如,将用户数据转换为JavaScript到HTML脚本元素中)。)
答案 1 :(得分:0)
圆括号和百分号是HTML中的不是特殊字符,它们没有特殊含义。因此,htmlentities
不接触它们。如果您仍然想要对它们进行编码,则需要手动str_replace
它们。但同样,在纯HTML环境中这样做毫无意义。