检查 SQL 注入的 C# 查询字符串
Check C# query string for SQL injection
我得到了一个项目,其中开发人员当时没有参数化 SQL 查询,而是简单地连接了用户提供的值。现在我的任务是尽可能少地使应用程序免受 SQL 注入攻击。许多 SQL 查询分布在整个代码中,因此几乎不可能对所有查询进行后处理。这会花费我很多个月的工作。
优点是所有的查询都由一种方法执行。我现在的解决方案是在这个方法中检查查询字符串,其中所有查询 运行,分号和 'GO' 关键字,然后再执行。在这一点上应该提到的是,我可以保证始终只执行一个查询。如果字符串中有多个分号或 'GO' 语句,我拒绝执行到数据库并中止进程。
我现在的问题:有没有人有更好的解决问题的建议?您将如何解决这里的问题?
谢谢。
我真的不认为除了完全使用 SQL 服务器阻止它的功能(参数化查询)之外做任何事情都会对您有所帮助。您可以在某种程度上尝试防止注入发生,删除明显的注入载体,购买您永远无法确定。黑客是有创造力的人:)
因此,如果您想要一个可靠的解决方案,我建议您重写为参数化查询。这很容易做到,例如小巧玲珑。但我知道你拥有的代码量可能会非常耗时,但不幸的是没有办法解决它。
我得到了一个项目,其中开发人员当时没有参数化 SQL 查询,而是简单地连接了用户提供的值。现在我的任务是尽可能少地使应用程序免受 SQL 注入攻击。许多 SQL 查询分布在整个代码中,因此几乎不可能对所有查询进行后处理。这会花费我很多个月的工作。
优点是所有的查询都由一种方法执行。我现在的解决方案是在这个方法中检查查询字符串,其中所有查询 运行,分号和 'GO' 关键字,然后再执行。在这一点上应该提到的是,我可以保证始终只执行一个查询。如果字符串中有多个分号或 'GO' 语句,我拒绝执行到数据库并中止进程。
我现在的问题:有没有人有更好的解决问题的建议?您将如何解决这里的问题?
谢谢。
我真的不认为除了完全使用 SQL 服务器阻止它的功能(参数化查询)之外做任何事情都会对您有所帮助。您可以在某种程度上尝试防止注入发生,删除明显的注入载体,购买您永远无法确定。黑客是有创造力的人:)
因此,如果您想要一个可靠的解决方案,我建议您重写为参数化查询。这很容易做到,例如小巧玲珑。但我知道你拥有的代码量可能会非常耗时,但不幸的是没有办法解决它。