在我的应用程序的注册页面上,有一个用户名字段。我想防止 SQL 注入(inject)攻击,同时允许复杂的名称,例如 Aldéric D'Aurve-Sanct,其中包含用作撇号的单引号。
如果我使用 regex string like this one 将名称列入白名单,然后我可以使用双引号(名称中不允许使用)来完全转义字符串吗?换句话说,当用双引号引起来时,使用包含单引号但不包含其他控制字符的字符串是否安全?这种简单的解决方案是否可能引入任何漏洞?
注意:我不想在这种情况下使用准备好的语句。
最佳答案
如果你真的不能使用准备好的语句,永远不要逃避自己,如果你需要的话,有一些函数可以做到这一点。
例如,如果您使用 php PDO,请使用 PDO::quote : https://secure.php.net/manual/en/pdo.quote.php
但是,如果可能的话,请使用准备好的语句:
- 无需列入黑名单
- 无需逃避
- 无注入(inject)风险
- 一切都被允许
关于javascript - 通过白名单实现 SQL 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164755/