sql注入漏洞史上最详细的解释
一、原理
首先,先了解一下原理,就拿一个最简单的例子吧,登录功能,如果后台sql语句执行是:
通过传来的用户名和密码查找数据库是否有记录。当我们用户名输入一个万能账号,' or 1=1--,那后台语句就变成了:
1=1为真,密码输入什么都可以,因为被--注释掉了,所以会登录成功。总之一句话,sql注入就是绕过程序限制,让数据在数据库中执行。
二、概念
简单理解其原理后,来看一下枯燥的概念。
注入分为两大类,一个是数字型注入,一个是字符型注入。数字型注入一般都是url中带id的,像文章地址后就跟有id号,或者是商品地址等。我在网上找了一个网站的商品地址,后有id,跟了一个单引号后报错,敏感信息就不外露了,如下图:
可能原来查商品的sql语句是where id=38,加上单引号后变成了where id=38',这样语句有错误,便把错误信息返回了,这个信息属于有价值了,已经暴露了表名,sql语句和数据库类型。
像这种数字型的注入一般出现在php或者asp的网站中,因为他们属于弱类型语言,他们的机制会将变量的数据类型自动推导出来,在这块,强类型语言会更有优势。
字符型sql注入就是原理中说到的,它与数字型最大区别在于字符型一般都需要单引号去闭合。例如下图中登录,用的字符型注入,当然没有登录成功:
三、分类
主要是两大类一个字符一个数字。当然,往细了分也可以分出多种,下面简单理解一下:
数据分析咨询请扫描二维码