SQL 白名单安全

SQL Safety with Whitelisting

在我的应用程序的注册页面上,有一个用户名字段。我想防止 SQL 注入攻击,同时允许像 Aldéric D'Aurve-Sanct 这样的复杂名称,其中包含用作撇号的单引号。

如果我使用 regex string like this one 将名称列入白名单,我可以使用双引号(名称中不允许使用)来完全转义字符串吗?换句话说,当被双引号包围时,使用包含单引号但不包含其他控制字符的字符串是否安全?这种简单的解决方案是否会引入任何漏洞?

注意:我不想在这种情况下使用准备好的语句。

如果你真的不能使用准备好的语句,永远不要逃避自己,如果你需要的话,有函数可以做到。

例如,如果您使用 php PDO,请使用 PDO::quote :https://secure.php.net/manual/en/pdo.quote.php

但是,尽可能使用准备好的语句:

  • 无需黑名单
  • 不用逃跑
  • 无注射风险
  • 一切皆可