我的用户可以向我的数据库中插入任何内容。
因此,不能选择使用白名单/黑名单字符。
我并不担心(涵盖它)数据库端(SQL 注入),而是我的页面中的代码注入。
是否存在htmlspecialchars()
不足以防止代码注入的情况?
我的用户可以向我的数据库中插入任何内容。
因此,不能选择使用白名单/黑名单字符。
我并不担心(涵盖它)数据库端(SQL 注入),而是我的页面中的代码注入。
是否存在htmlspecialchars()
不足以防止代码注入的情况?
将用户文本插入单引号属性时,纯htmlspecialchars
文本是不够的。在这种情况下,您需要添加ENT_QUOTES
并且需要传递编码。
<tag attr='<?php echo htmlspecialchars($usertext);?>'> //dangerous if ENT_QUOTES is not used
将用户文本作为字符串插入 javascript/json 时,您需要额外的转义。
我认为它对于 stange 字符集也失败了。但是,如果您使用常用的字符集 UTF-8、Latin1、... 之一,它将按预期工作。
不,这在所有情况下都不够。这在很大程度上取决于您的代码库。例如,如果您使用 JavaScript 向数据库发出某些 AJAX 请求,htmlspecialchars()
则有时是不够的(取决于您使用它的位置)。如果你想保护 cookie 免受 JavaScript XSS 的影响,htmlspecialchars()
也不够好。
以下是一些何时htmlspecialchars()
可能失败的示例:https ://www.owasp.org/index.php/Interpreter_Injection#Why_htmlspecialchars_is_not_always_enough 。您的问题也高度依赖于您使用的数据库(不是每个人都使用 MySQL)。如果您正在编写一个复杂的应用程序,我强烈建议您使用众多框架之一,这些框架可以抽象出这些烦人的小特性并让您担心应用程序代码。
htmlspecialchars 就足够了。随着<
和>
被转换成<
,>
你不能再包含脚本了。