答案 0 :(得分:5)
ADO.NET中最简单的工具是对所有可变的查询值使用 sql parameters 。这也具有效率优势。即使你的代码中有明确的sql并且根本没有使用存储过程或函数,你仍然可以通过使用相同的查询字符串来获得这两种的优点,同时仅改变参数的值。 / p>
当你真的需要动态地构造你的sql命令文本而不能使用sql参数时,可能有时候(例如使用搜索引擎)。这是不幸的,因为保护自己免受sql注入(各种消毒和关键字黑名单)的其他方式更多涉及并要求你要有思想和聪明。尽量避免这种情况!
答案 1 :(得分:1)
我相信你可以通过使用sqlparameters来避免这个问题。
答案 2 :(得分:1)
这是一个“ADO.NET”问题吗?如果是,那么SQLParameters是你的朋友。 Scott Gu关于这个主题的文章虽然陈旧但仍然非常有用并且有很好的建议。
如果您没有使用ADO.NET,那么大多数ORM都可以防止攻击。例如,LLBLGen生成参数化查询。和Linq一样对SQL。我猜他们都这样做,虽然检查你的ORM风味:)
答案 3 :(得分:0)
对我来说,最简单的方法是使用Linq2Sql查询数据库。文章中没有提到它,因为它不存在。您也可以使用Entity Framework。它提供更多的功能和更高的学习曲线。还有很多其他的ORM,大多数(也许除了我不知道)都会保护你免受SQL注入。另一个好处是ORM负责从结果中创建一个对象。