-1

所以我正在使用 PDO 来尝试防止 SQL 注入。

我的问题是我应该在使用之前检查/验证我的数据库信息吗?

例如:

$stmt = $pdo -> prepare(SELECT userID FROM user, comment WHERE userNumber ='1' AND user.userName = comment.UserName");

我认为我有的选择是:

1)我在将所有输入插入数据库之前验证所有输入,因此我不必检查 user.userName 是否是可以注入代码的字符串。

2) 我应该参数化从数据库中获取的数据。还不确定,但类似:

$stmt->bindValue(':comment.UserName', comment.UserName, PDO::PARAM_STR); 

3) 验证并仍然参数化。

*即时查询

4

1 回答 1

1

规则很简单:始终参数化您的查询。即使这些查询从未在网页上使用并且面对恶意用户群,任何时候您在查询字符串中使用外部数据,即使是来自数据库的数据,您仍然可以注入自己。

唯一的例外是参数查询不起作用的时候,例如任意长度的WHERE IN (...)值列表、动态表/字段名称(这通常是个坏主意)。在这些有限的情况下,您自己构建查询,但必须采取适当的注入攻击缓解程序。

于 2012-07-30T16:05:53.160 回答