SQL注入原理以及怎样避免注入

SQL注入:究竟什么时候会用到SQL呢?回答是訪问数据库的时候。也就是说SQL注入-->直接威胁到了数据源,呵呵。数据库都收到了威胁,站点还能正常现实么?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串。终于达到欺骗server运行恶意的SQL命令。

详细来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎运行的能力,它能够通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的站点上的数据库。而不是依照设计者意图去运行SQL语句。

[1] 比方先前的非常多影视站点泄露VIP会员password大多就是通过WEB表单递交查询字符暴出的,这类表单特别easy受到SQL注入式攻击

依据相关技术原理,SQL注入能够分为平台层注入和代码层注入。

前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是因为程序猿对输入未进行仔细地过滤,从而运行了非法的数据查询。基于此,SQL注入的产生原因通常表如今下面几方面:①不当的类型处理;②不安全的数据库配置。③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

注入方法:

1.猜表名。列名等

先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也能够这样
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正确的,那么写的表名或列名就是正确

2.后台身份验证绕过漏洞
验证绕过漏洞就是'or'='or'后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误
比如管理员的账号password都是admin。那么再比方后台的数据库查询语句是
user=request("user")
passwd=request("passwd")
sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
那么我使用'or 'a'='a来做usernamepassword的话,那么查询就变成了
select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'
这种话,依据运算规则。这里一共同拥有4个查询语句,那么查询结果就是 假or真and假or真,先算and 再算or,终于结果为真 。这样就能够进到后台了

怎样预防 呢?归纳一下,主要有下面几点:

1.永远不要信任用户的输入。对用户的输入进行校验,能够通过正則表達式,或限制长度;对单引號和
双"-"进行转换等。

2.永远不要使用动态拼装sql,能够使用參数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每一个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放。加密或者hash掉password和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自己定义的错误信息对原始错误信息进行包装
6.sql注入的检測方法一般採取辅助软件或站点平台来检測。软件一般採用sql注入检測工具jsky,站点平台就有亿思站点安全平台检測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS能够有效的防御SQL注入。XSS攻击等。
等待试验........

posted on 2017-07-23 17:28  yjbjingcha  阅读(5065)  评论(0编辑  收藏  举报

导航