概念 SQL注入是一种欺骗数据库服务器的攻击手段,通过修改或拼接web界面中表单域、原URL或数据包输入的参数为SQL语句,输入到web服务器中进而使数据库服务器执行数据库命令。 简单的说,就是在输入字符串中嵌入SQL命令,在设计程序中忽略了对特殊字符串的检查,这些嵌入的指令便会被误认为是正常的SQL命令从而在数据库中执行,从而攻击成功。 假如一个网站的页面显示URL为example.com?test=111,此时URL实际向服务器传递了值为111的变量test,这表明当前页面是对数据库进行动态查询的结果,此时在URL中插入恶意SQL语句并执行。 例如,一个网站登录验证的 SQL 查询代码为: strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');" 如果填入以下内容: userName = "1' OR '1'='1"; passWord = "1' OR '1'='1"; 那么 SQL 查询字符串为: strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');" 此时无需验证通过就能执行以下查询: strSQL = "SELECT * FROM users;" 分类 目前SQL注入大致分为普通注入和盲注: 普通注入 根据后台数据库提示有价值的错误信息进行注入。 盲注 有经验的管理员在给出代码有漏洞的页面时,没有提供详细的错误信息。 攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入的技术(盲注的难度较大,但注入测试中经常会遇到)。