SQL注入漏洞是Web层面最高危的漏洞之一。错误博客( cuowu.com )分享的是《SEO注入是什么(SQL注入漏洞原理)》。希望对大家有所帮助。

想要更好地研究SQL注入,就必须深入了解每种数据库的SQL语法及特性。虽然现在的大多数数据库都会遵循SQL标准,但是每种数据库也都有自己的单行函数及特性。
例如一个登陆页面的SQL注入。
用户输入正确的账户和密码后,如果用户存在且密码正确,则会登陆成功并跳转;如果不存在或者密码不正确,会提示账户或者密码错误。
接下来使用一个比较特殊的用户名登陆
or 1=1–
密码随意或者不写,在点击登陆时,一样也是可以登陆的。比较奇怪的是任意密码都可以登陆,进入数据库查看,发现根本没有or 1=1–这个用户。
最后分析发现,登陆处最终调用了findAdmin方法,代码如下:
public boolean findAdmin(Admin admin){
String sql=”select count(*)from admin where username='”+admin.getUsername()+”‘ and password='”+admin.getPassword()+”‘”;//SQL查询语句
try {
ResultSet res =this.conn. createStatement().executeQuery(sql);//执行SQL语句
if(res.next()){
int i = res.getInt(1);//获取第一列的值
if(i>0){
return true; //如果结果大于0,则返回true
}
}
} catch (Exception e){
e.printStackTrace(); //打印异常信息
}
return false;
}
上述SQL语句的意思非常清楚:在数据库中查询username=xxx,并且password=xxx的结果,若查询的值大于0,则代表用户存在,返回true,代表登陆成功,否则返回false,代表登陆失败。
这段代码看起来并没有什么错误,现在提交账户为admin,密码为password,跟踪SQL语句,发现最终SQL语句为:
select count(*)from admin where username=’admin’ and password = ‘password’
在数据库中,存在admin用户,并且密码为password,所以此时返回结果为1。显然,1大于0,所以通过验证,用户可以成功登录。
接下来继续输入这个特殊用户 ‘or 1=1–,并跟踪SQL语句,最终执行SQL语句为
select count(*)from admin where username=’ ‘or 1=1– ‘ and password=”
终于找到问题的根源了,从开发人员的角度理解,SQL语句的本义是:
username=‘账户’ and password=‘密码’
现在却变成:
username=‘账户’ or 1=1–‘ and password=”
此时的password已经被注释掉了,而且username=’账户’ or 1=1这条语句永远为真。
在SQL标准中标准的注释方式是”–“注释,即单行注释。故上述的password被注释
那么最终执行的SQL语句相当于:
select count(*) from admin //查询admin表所有的数据条数
很显然,返回条数大于0,所以可以顺利通过验证,登录成功。这就是一次最简单的SQL注入过程。虽然过程很简单,但是其危害极大,比如用户名位置输入:
‘ or 1=1;drop table admin —
因为SQL Server支持多语句执行,所以这里可以直接删除admin表。
由此可得知,SQL注入漏洞的形成原因就是:用户输入的数据被SQL解释器执行。
仅仅知道SQL注入漏洞的形成的原因还不足以完美地做好SQL注入的防护工作,因为它是防不胜防的。还需要注入漏洞的多种类型。
以上就是错误博客( cuowu.com )分享的是《SEO注入是什么(SQL注入漏洞原理)》。感谢您的阅读。
百度搜索“错误博客”即可找到本站,微信搜索“小小课堂网”关注小小课堂网公众号。错误博客( cuowu.com )欢迎用户投稿,发布者:中二少年,文章版权归作者所有,投稿文章不代表错误博客立场,中二少年发布为错误博客原创文章,转载请注明出处:https://cuowu.com/2516.html