SQL注入是什么?
SQL注入(Sql Injection)是一种将SQL语句插入或者添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
原理
访问用户对网站可以输入参数的地方进行提交参数,这些参数里插入了一些敏感参数传输到服务器后端,服务器后端并没有对其进行详细的安全过滤,导致直接进入到了数据库里,并且数据库执行了而已语句,从而导致了SQL注入
要点:用户输入的参数可控,并且没有对参数进行严格的过滤就带入了数据库执行,所以导致了SQL注入。
漏洞的危害
- 后台地址以及管理原密码泄露
- 数据库中存储的用户隐私信息泄露
- 通过操作数据库对某些网页进行串改
- 获取服务器权限,直接GetShell
注入点类型
数字型:
比如https://xxx/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语句
- 对用户提交的参数安全过滤,比如说一些的特殊字符(,()*&……%#等等)进行字符转义以及编码的安全转换
- 网站的报错信息尽量不要返回给客户端,比如说一些字符错误,数据库的报错信息,尽可能防止泄露给客户端
Awesome! Its genuinely amazing piece of writing, I have got much clear idea about from this paragraph.
Issuer services logged a strong increase of 24 relative to 1Q 13 due to increased corporate actions and technology reimbursements clomid by avents We are therefore revising our estimate to be 2