检查SQL注入的C#查询字符串

检查SQL注入的C#查询字符串,c#,sql,sql-server,sql-injection,C#,Sql,Sql Server,Sql Injection,我得到了一个项目,在该项目中,开发人员当时没有参数化SQL查询,只是将用户提供的值连接起来。现在我的任务是使应用程序尽可能不受SQL注入攻击的影响。大量SQL查询分布在整个代码中,因此几乎不可能对所有查询进行后处理。这将花费我好几个月的工作 优点是所有查询都由一个方法执行。我现在的解决方案是在执行之前,检查这个方法中的查询字符串(所有查询都在这个方法中运行)是否有分号和“GO”关键字。此时应该提到的是,我可以保证始终只执行一个查询。如果字符串中有多个分号或“GO”语句,我将拒绝对数据库执行并中止

我得到了一个项目,在该项目中,开发人员当时没有参数化SQL查询,只是将用户提供的值连接起来。现在我的任务是使应用程序尽可能不受SQL注入攻击的影响。大量SQL查询分布在整个代码中,因此几乎不可能对所有查询进行后处理。这将花费我好几个月的工作

优点是所有查询都由一个方法执行。我现在的解决方案是在执行之前,检查这个方法中的查询字符串(所有查询都在这个方法中运行)是否有分号和“GO”关键字。此时应该提到的是,我可以保证始终只执行一个查询。如果字符串中有多个分号或“GO”语句,我将拒绝对数据库执行并中止该过程

我现在的问题是:有没有人有更好的建议来解决这个问题?你将如何解决这个问题


谢谢。

我真的认为,除了使用SQL Server阻止它的功能(参数化查询)之外,做任何事情都不会对您有所帮助。你可以在某种程度上阻止注射的发生,去除明显的注射载体,但你永远不能确定。黑客是有创造力的家伙:)


因此,如果您想要一个健壮的解决方案,我建议您重写为参数化查询。这很容易做到,例如整洁。但我知道你有大量的代码会让它非常耗时,但不幸的是,没有办法解决。

重写代码,并通过将值绑定到占位符来正确执行。@Shawn的回答是唯一真实的,可行的解决方案…
现在我的任务是让应用程序尽可能不受SQL注入攻击的影响。
如果您想要免疫,您需要参数化查询。任何其他方法都是不可靠的。你能通过白/黑名单找到一些方法吗?当然。但这不是豁免权。
我干净利落地问,像“重写代码…”这样的评论没有帮助
有时需要做一些困难的事情。如果你想减少患肺癌的几率,你需要戒烟。医生告诉人们戒烟,尽管这很难,但并不是无益的。它告诉他们应该认真考虑的事情。”Ali -你的问题是:“有人有更好的建议来解决这个问题吗?你将如何解决这个问题?”肖恩斯回答:“改写代码并通过[…]适当地完成它。”一个明确问题的明确答案防止SQL注入是一个已解决的问题。除了使用已知的和经过测试的参数使用方法之外,做任何事情都有被规避的风险。你可能不喜欢它,这可能是一个很大的工作,但它也是唯一的方法,以确保节省。