0

我正在使用 PHP 5.3.6 并使用 HTML 实体对一些 POST 数据进行编码。但是,括号和 % 并未编码为它们的等效实体。

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

正在发布的数据:

paren ( ) & % won't encode

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

输出:

paren ( ) & % won't encode

如您所见, ( ) % 未触及。

提前致谢。

-编辑-这就是我最终使用的完成这项工作的东西。谢谢。

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

2 回答 2

1

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

如果您要将数据插入 HTML(例如,与 JavaScript 相对),那么除了<, >, &, "and之外的任何东西都不是真的'(尽管这些都可能是矫枉过正,这取决于上下文)。htmlspecialchars在大多数情况下就足够了(尽管要注意旧的 IE 及其 UTF-7 漏洞利用)。

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

于 2013-05-22T08:23:06.463 回答
0

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

于 2013-05-22T08:21:17.257 回答