sql注入漏洞
一、简介
SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据。
二、原理
一般用户登录用的SQL语句为:SELECT * FROM user WHERE username=‘admin’ AND password=‘passwd’,此处admin和passwd分别为用户输入的用户名和密码,如果程序员没有对用户输入的用户名和密码做处理,就可以构造万能密码成功绕过登录验证,如用户输入’or 1#,SQL语句将变为:SELECT * FROM user WHERE username=’‘or 1#’ AND password=’’,‘’or 1为TRUE,#注释掉后面的内容,所以查询语句可以正确执行。
三、SQL注入攻击一般流程:
(1)探测SQL注入点:常见方法在参数传递的地方输入参数,并添加”“‘、”and 1=1“、”and 1=2“、“or 1 = 1”、“or 1=2”, 若浏览器返回错误信息,则说明未对输入做处理;若”and 1=2 “和"and 1=1"结果不同,则说明对输入进行了处理。
(2)判断数据库类型:常见的两种数据库SQL Server 和 Access。可以利用系统变量、系统表、等区分
(3)Access 数据库;探测数据库表名、列名、字段值来判断数据库信息,了解数据库模式,采用方法是不合法的查询得到结果。
(4)SQL Server 数据库:首先判断是否支持多句查询、子查询,是否存在数据库用户并判断其权限。
(5)提升权限:确定数据库信息并获得相关权限后,进行攻击。
四、SQL注入防范:
(1)参数化语句:用过将查询语句参数化,来防范SQL注入
(2)输入验证:通过白名单和黑名单的验证对用户的输入进行验证
(3)输出编码:对程序各个模块之间或者各个部分之间传递的数据进行编码处理
(4)规范化:拒绝所有不符合规范的输入和对输入编码进行解码分析是常见的两种规范化处理方法
(5)避免SQL注入漏洞的程序设计:使用存储过程、处理敏感数据等
(6) 安全的编码规范:根据OWASP提供的安全编码规范进行相关编码