sql注入定义:
用户可控参数中注入sql语法,破坏原有sql结构,到达编写程序之外结果的共计行为。
产生原因:
1、使用字符串拼接的形式构造sql.
2、未对用户可控参数检查过滤接入到sql语句中。
举例万能密码的原理了解sql注入:
所有程序都有一个登陆框,提供给用户输入用户名和密码,我们在拿到用户输入的用户名密码参数进行数据库匹配,找到数据后我们给用户登陆成功,当然我们现在都已经做了防止sql注入的预防,比如在mybatis框架中xml的sql语句中对于用户可控参数传入sql中是我们用的是#{参数}而非${参数},这就是泛指sql注入的一种体现,只不过以前人云亦云,如今却能明白整个过程,我们举一例mysql数据库实现用户登录在没有做防止sql注入时的万能密码:(登录界面就不再画了)
这是我们数据库现有的employee表数据:
按照正常的用户输入account和password,用户传参account = ckx,password = 111传到sql中:
select * from employee where account = 'ckx' and password = '111';
而当用户输入account = ‘ or 1=1 # ,password 随便输入或者不输入,会产生什么情况?这时如果我们没有做预防sql注入分析:
这种情就可以获取MySQL数据库的employee表的所有用户,因为匹配到数据,程序就会给登录成功!
这就是万能钥匙sql注入的一个简单说明。
关于预防:
1、对用户可控参数保持警惕
2、只有客户端的验证等于没有验证
3、不要把错误信息暴漏给用户
4、sql注入不仅仅可以通过输入框,还有url
5、除了服务器页面错误,还有其他方式获取数据库信息
6、通过软件模拟注入,速度快。