SQL注入漏洞
目录
1 是什么?
是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再讲这些参数传递给后台的SQL服务器加以解析并执行。由于SQL语句本身多样性,以及用于构造的SQL语句编码方法很多,因此凡是构造SQL语句没有过滤的均存在被潜在攻击的风险。
2 为什么?
其本质是对于输入检查不充分,导致将SQL语句将用户提交的非法数据当做语句的一部分来执行
2.1 原理
两个条件
用户能够控制输入
程序代码拼接了用户的输入
3 会造成什么危害?
数据泄露、数据丢失、数据篡改
绕过认证、验证,绕过登录等功能
服务器进一步被入侵
数据、功能的损坏
4 触发场景?
任何客户端可控,带有参数传递到服务器的变量都可能触发SQL注入
GET;
POST;
头部注入;
COOKIE注入;
搜索注入;
User-Agent;
X-Forward-For
5 怎么修复?
采用参数化查询的方法(推荐)
参数化查询强制开发者先定义所有的SQL语句,然后向每个查询传递参数。
严格限定参数类型
明确参数检验的边界,必须在服务端执行数据验证
内置过滤系统(本质是黑名单,很常见但是不推荐)
6 怎么将损失降至最小?
6.1 数据库加固
最小权限原则
拒绝用户访问敏感的系统存储过程
限制用户所能够访问的数据库表