一、SQL注入的概述
定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
通俗易懂:由于业务系统在处理用户请求时,没有对用户的输入做安全检查和过滤,导致攻击者向服务器提交恶意的SQL语句, 可导致数据库中的敏感数据被攻击者获取、脱裤等。
二、分类
1、常见的sql注入按照参数类型可分为两种:数字型和字符型。
当发生注入点的参数为整数时,比如 ID,num,page等,这种形式的就属于数字型注入漏洞。同样,当注入点是字符串时,则称为字符型注入,字符型注入需要引号来闭合。
2、也可以根据数据库返回的结果,分为回显注入、报错注入、盲注。
回显注入:可以直接在存在注入点的当前页面中获取返回结果。
报错注入:程序将数据库的返回错误信息直接显示在页面中,虽然没有返回数据库的查询结果,但是可以构造一些报错语句从错误信息中获取想要的结果。
盲注:程序后端屏蔽了数据库的错误信息,没有直接显示结果也没有报错信息,只能通过数据库的逻辑和延时函数来判断注入的结果。根据表现形式的不同,盲注又分为based boolean和based time两种类型。
3、按照注入位置及方式不同分为:post注入,get注入,cookie注入,盲注,延时注入,搜索注入,base64注入,无论此种分类如何多,都可以归纳为以上两种形式。
三、出现位置
任何与数据库交互的位置
四、修复建议
1、建议直接使用预编译的方式组装SQL;
2、参数字符串拼接,需要删字符串中的中的单引号,然后两边加上单引号;
3、数字拼接,需要先 parseInt 后再转为字符串;
4、动态表名,需要删表名中的反引号,两边加上反引号;
网友评论