1.什么是SQL注入?
SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界最普遍的漏洞之一。
SQL注入其实就是恶意用户通过在表单中填写SQL关键字的数据来使数据库执行非常规代码的过程
这个问题的来源是。SQL数据库的操作是通过SQL语句来执行的。而无论是执行代码还是数据项都必须卸载SQL语句中,这就导致如果我们在数据项中加入了某些SQL语句关键字,这些关键字就很可能在数据库写入或读取数据时得到执行
2.SQL注入简单例子
比如做登录验证时,假设SQL语句为select * from table where name=‘xxx’ and password=‘xxx’ and compare=‘xxx’
假设姓名和密码都做了验证、验证码未做验证,当用户在输入框中输入:‘ or 1=1-- 那么SQL就会变为
select * from table where name=‘xxx’ and password=‘xxx’ and compare=’ ’ or 1=1 --’
可以看出就相当于会执行select * from table where name=‘xxx’ and password=‘xxx’ and compare=’ ’ or 1=1
而1=1会一直成立,结果显而易见,登录验证通过
另外,当我们改变输入框中的输入,(只有客户端的验证等于没有验证,页面长度验证等形同虚设),比如一些查询语句,那么就可以通过报错信息获取服务器的库名、表名、字段名进而获取数据库中的信息
如果我们在输入框中输入
另外如果我们插入某条数据时,假设语句为insert into table student(name) values(‘xxx’)
如果我输入的是:"‘tom’);drop table student;" 拼接后甚至可能会删除掉student表的数据
3.如何防止SQL注入
1)数据校验:尽量避免使用常见的数据库名和数据库结构;使用正则表达式等字符串过滤手段限制数据项的格式、字符数目等,避免数据项中存在引号、分号等特殊字符; 将数据项以参数的方式与SQL执行语句分离
2)权限限制: 严格限制web因公的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害
3)日志处理: 当数据库操作失败时,尽量不要将原始错误日志返回
4)其他注意事项:只有客户段的验证等于没有验证;SQL注入不禁能通过输入框,还能通过URL达到目的
处理服务器错误页面,还有其他方法获取到数据库信息 可通过软件模拟注入行为
4.常见防止SQL注入方式
https://mp.weixin.qq.com/s/IFS7oFCzednybKJBw0On6w