sql注入介绍与实例操作( #{}和${})
sql注入介绍与实例操作
一、sql注入 sql注入就是,利用系统的漏洞(未作对应的安全防护),在输入框内输入不合法的信息,提交请求后,利用sql语句的特点,直接操作数据库(增删改查),甚至删除数据库的数据。 二、实例 在字符串拼接的sql语句中,sql注入的攻击目的更容易达到,下面以登录为例: 加入你编写的登录验证sql为: String sql="select * from user where account= ’ " + account + " ’ and password=’ " +password+ " ’ " 你输入123和456 sql就变成: select * from user where account = ‘123’ and password = ‘456’ 这个当然没问题,要不查询成功,要不失败!但是用户真的会按规矩办事吗?
如果他输入 ’ or 1=1 # 和 456 sql就变成: select * from user where account = ‘’ or 1=1 #’ and password = ‘456’ #在sql中表示注释,所以系统执行的是: select * from user where account =‘’ or 1=1 1=1一定成立,所以这个sql一定成功,那你登录不就危险了??
想的再恐怖点,增删改查是不是都能利用这种思维进行恶意操作,又或者:删除数据库???
比如输入 ’ or 1=1 ; drop database 数据库名称 # 那系统执行的就变成 select * from user where account =‘’ or 1=1 ; drop database 数据库名称 这就直接删库了!!
三、#{} 和 ${} 在mybatis 中,参数的形式有 #{} 和 ${} #{}: 这个是将你输入的都看作字符串 ,哪怕你再加单引号也没用,所以是安全的,它并不是字符串连接方式去组装sql语句
${}: 这个和上面登录的例子一样,是字符串拼接,自然是字符串拼接,就有默认添加的双引号,我们就可以在这上面入手进行sql注入攻击
四、预防 1、限定长度、格式等 2、对敏感符号进行过滤,比如 单引号、双引号、百分号之类的 3、数据操作检查权限 4、数据加密