【发布时间】:2013-01-07 16:08:50
【问题描述】:
我时不时地在一个允许用户选择多个项目然后对它们执行批量操作的系统上工作。通常,我会在运行时构建 SQL,如下所示:
string inClause = String.Join(", ", selectedIds);
string command = "SELECT * FROM Customer WHERE CustomerId IN ({0})";
command = String.Format(command, inClause);
当然,由于 SQL 注入,这种代码风格是不安全的。我可以通过放入参数占位符并创建参数来解决这个问题。
不过,我想知道是否还有另一种我没有考虑过的方法。我当然不想为每个 ID 执行一次命令。
【问题讨论】:
-
如果
selectedIds是整数数组,则不存在SQL 注入的危险。无法将'填充到整数中。 -
只要你验证它们是整数就安全了。
标签: sql sql-injection in-clause