10

我的用户可以向我的数据库中插入任何内容。

因此,不能选择使用白名单/黑名单字符。

我并不担心(涵盖它)数据库端(SQL 注入),而是我的页面中的代码注入。

是否存在htmlspecialchars()不足以防止代码注入的情况?

4

4 回答 4

4

将用户文本插入单引号属性时,纯htmlspecialchars文本是不够的。在这种情况下,您需要添加ENT_QUOTES并且需要传递编码。

<tag attr='<?php echo htmlspecialchars($usertext);?>'> //dangerous if ENT_QUOTES is not used

将用户文本作为字符串插入 javascript/json 时,您需要额外的转义。

我认为它对于 stange 字符集也失败了。但是,如果您使用常用的字符集 UTF-8、Latin1、... 之一,它将按预期工作。

于 2011-11-12T18:37:15.457 回答
3

不,这在所有情况下都不够。这在很大程度上取决于您的代码库。例如,如果您使用 JavaScript 向数据库发出某些 AJAX 请求,htmlspecialchars()则有时是不够的(取决于您使用它的位置)。如果你想保护 cookie 免受 JavaScript XSS 的影响,htmlspecialchars()也不够好。

以下是一些何时htmlspecialchars()可能失败的示例:https ://www.owasp.org/index.php/Interpreter_Injection#Why_htmlspecialchars_is_not_always_enough 。您的问题也高度依赖于您使用的数据库(不是每个人都使用 MySQL)。如果您正在编写一个复杂的应用程序,我强烈建议您使用众多框架之一,这些框架可以抽象出这些烦人的小特性并让您担心应用程序代码。

于 2011-11-12T18:36:44.540 回答
2
于 2011-11-12T18:36:11.940 回答
1

htmlspecialchars 就足够了。随着<>被转换成&lt;&gt;你不能再包含脚本了。

于 2011-11-12T18:35:33.167 回答