软件都是人写的,人都会犯错或考虑问题不周的,越大的系统越容易有漏洞。 通常情况下99.99%无错的程序很少会出问题。 但99.99%无错的程序仍会被非正常用户利用那0.01%的错误。 0.01%安全问题等于100%的失败。
由于程序中对用户输入检查不严格,用户可利用应用程序根据提交的数据动态生成SQL命令的特性,在URL、表单域,或者其他的输入域中输入自己的SQL命令,改变SQL命令的操作,将被修改的SQL命令注入到后端数据库引擎执行。
其成因可以归结为以下两个原因: (1)程序编写者在处理应用程序和数据库交互时,使用字符串拼接的方式构造SQL语句。 (2)未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。 最终,用户提交的参数数据未做充分检查过滤即被代入到SQL命令中,改变了原有SQL命令的“语义”,且成功被数据库执行。
常见的语句有: