SQL注入是什么?
SQL注入(Sql Injection)是一种将SQL语句插入或者添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
原理
访问用户对网站可以输入参数的地方进行提交参数,这些参数里插入了一些敏感参数传输到服务器后端,服务器后端并没有对其进行详细的安全过滤,导致直接进入到了数据库里,并且数据库执行了而已语句,从而导致了SQL注入
漏洞的危害
- 后台地址以及管理原密码泄露
- 数据库中存储的用户隐私信息泄露
- 通过操作数据库对某些网页进行串改
- 获取服务器权限,直接GetShell
注入点类型
数字型:比如https://www.xffbk.cn/index.php?id=1注入点id=1,1为数字所以一般叫做数字型注入,经常出现在查看用户个人,文章等,大部分都是以ID=X的方式传入到数据库中查出对应信息返回给前台。
数据库原执行语句:select * where 表名 id=1 攻击语句:select * where 表明 id=1 and 1=1--+
字符型注入:https://www.xffbk.cn/index.php?name=user,注入点name=user,user为字符型所以叫做字符型注入点。
数据库原执行语句:select * where 表名 from name='user' 攻击语句:select * where 表名 from name='user' and 1=1--+
搜索型:之类注入产生原因是因为用户在进行数据搜索时没有对搜索的参数进行过滤,一般出现在查询、搜索框处,数据库执行的语句大概为select * from 表明 where 字段 like '内容'
数据库原执行语句:select * from 表名 where like '%$pwd%' 攻击语句:select * from 表明 where like '%X%' and '%'='%' --+
漏洞修复
- 将程序代码所有的查询语句,使用标准化数据库查询语句API接口,设定语句的参数进行过滤一些非法的字符,防止用户输入恶意的字符传入到数据库中执行SQL语句
- 对用户提交的参数安全过滤,比如说一些的特殊字符(,()*&……%#等等)进行字符转义以及编码的安全转换
- 网站的报错信息尽量不要返回给客户端,比如说一些字符错误,数据库的报错信息,尽可能防止泄露给客户端
如需详解请点击下一篇文章SQL注入详解-1
3 条评论
原理那一段,这些参数里插入了一些“而已”参数,这个是什么意思呢。。。
打错字了不好意思,应该是插入了一些敏感参数
好的|´・ω・)ノ