我来到一家已经有一个完全成长的项目的公司……但是在我之前工作的编码员没有遵循惯例,也没有使用参数化的SQL查询…因此,在一个非常巨大的地方有超过1000个地方可能容易受到sql注入攻击的项目……
我需要找到一个解决方案,它将自动检测代码中是否有sql注入.因此,例如,有一个表单允许用户输入关于产品的注释,这些注释将在提交时发送到数据库…我们如何确保用户没有输入有害查询而不是普通文本?
是否有任何高级代码/正则表达式/魔术可以检测此文本是否包含一段SQL查询而不是正常的无害文本?我将接受任何链接,任何语言的代码片段,甚至是商业软件,我会这样做.
谢谢
这里没有银弹. sql注入可能有许多模糊的形式,并尝试使用正则表达式或防火墙中的其他形式检测它们,或者应用程序可以保护您免受sql注入的最简单形式的影响,但经验丰富的黑客只会通过它.正如AdaTheDev已经指出的那样,检查代码的自动化工具,例如MS代码分析工具,可能会给你一个启动,但同样没有银弹.您需要完成整个申请.
当这是很多工作时,你应该制定一个计划.首先,制定一个指导方针,说明如何减轻这些类型的攻击.还尝试将您的应用程序分成几部分,从非常关键到不太关键.通过这种方式,您可以更好地估算修复错误的成本,并让管理层决定可能花费的成本,从而确定他们愿意承担的风险.未经身份验证的用户可以访问的应用程序部分是最关键的.如果每个人(在世界上)都可以在您的应用程序中创建一个帐户,那么这些用户可以访问的所有功能都非常关键.人口越少,您对这些用户的信任度越高,风险就越小.您可能稍后可以解决这些问题.但永远不要低估一个好黑客.他/她可能会破坏具有高权限的用户的帐户,并开始使用该帐户测试sql注入可能性.
始终尝试进行深度防御策略,拥有多个(或多个)防御层.例如,永远不要在应用程序中将数据库作为SA连接.创建一个仅具有所需权限的帐户,甚至可以创建多个sql帐户,每个角色一个帐户(或每个角色组).虽然限制数据库的权限有助于降低风险,但同样不要将其作为单一防御层进行赌注.例如,This article解释了当黑客能够进行sql注入时如何滥用较低权限帐户.
令人钦佩的是你在这里提出这个问题,因为我看到过去很多开发人员只是不想知道,这非常可怕,因为业务经常信任其开发人员(这也是可怕的).
祝你好运.