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、数据加密

猜你喜欢

转载自blog.csdn.net/weixin_43005654/article/details/124495740