SQL注入是什么意思(SQL注入漏洞原理)

- 作者:小小课堂网 - 阅 897   推荐

SQL注入是什么意思?SQL注入漏洞是Web层面最高危的漏洞之一。小小课堂网( xxkt.org.cn )分享的是《SQL注入是什么意思(SQL注入漏洞原理)》。希望对大家有所帮助。

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注入的防护工作,因为它是防不胜防的。还需要注入漏洞的多种类型。

以上就是小小课堂网( xxkt.org.cn )分享的是《SQL注入是什么意思(SQL注入漏洞原理)》。感谢您的阅读。

本文最后一次更新时间:2022年2月28日

本文《SQL注入是什么意思(SQL注入漏洞原理)》由小小课堂网整理或原创,侵删,欢迎转载并保留版权:https://xxkt.org.cn/ 感谢您的阅读。

本站提供SEO培训、咨询、诊断,QQ:2216876660 微信:huowuyan 公众号:小小课堂网

标签:

相关文章!
error: Content is protected !!