SQL注入的全面学习和了解

SQL注入很多都由于开发习惯和经验导致的,会给系统运行,带来易被攻击的风险,这需要我们在日常的开发过程中,了解一些SQL合规编写的技能,才能让我们的程序更加地健壮,增长我们的经验。

一、什么是SQL注入?

定义:Web程序数据库层安全漏洞,网络攻击常用方式。

核心原理:利用程序员编码疏忽,在用户输入中注入SQL语句,被数据库服务器误执行。

危害:无账号登录、未授权数据访问、数据库篡改/删除。

二、SQL注入的4大原理

  1. 拼接查询:通过分号分隔命令(例:1234;DELETE FROM user)
  2. 利用注释执行:插入注释符号屏蔽原有逻辑(例:1’OR SLEEP(500)–)
  3. 传入非法参数:未处理特殊字符(例:用户名G’chen导致SQL语法异常)

添加额外条件:插入真值表达式(例:1234 OR TRUE篡改更新范围)

三、典型SQL注入实例

原始SQL

select * from user table where
username='”+userName+”‘ and password='”+password+”‘
非法输入(用户名:”or 1=1 –,密码任意)

SELECT *FROM user table WHERE username=” or 1=1 –

  • and password=‘’
    危害升级(除数据库)

SELECT * FROM user table WHERE username=”;DROP
DATABASE DB NAME –‘ and password=”
核心逻辑:1=1 永真条件绕过验证,-注释屏蔽后续语句。

四、5种SQL注入防御方案

  1. 输入过滤校验

核心操作:剔除非法字符、正则匹配、类型校验(客户端+服务器端双重验证)。

优势:简单易实现,成本低。

  1. 参数化查询(预编译)

核心操作:使用占位符(?)替代直接拼接,语句与参数分离。

优势:防御效果最优,推荐首选。

  1. 安全测试审计

核心操作:代码审查、工具扫描、上线后定期漏洞检测。

优势:多环节兜底,覆盖遗漏。

  1. 数据库权限控制

核心操作:最小权限分配,限制用户操作范围。

优势:降低攻击影响面。

  1. 隐藏错误信息

核心操作:不向用户暴露数据库结构、报错详情。

优势:避免攻击者获取敏感信息。

五、SQL预编译详解

  1. 定义

将SQL语句模板化(占位符替代变量),编译后重复使用。

流程:词法语义解析→优化执行计划→编译缓存→参数替换执行

  1. MySQL预编译实操

1.创建测试表
CREATE TABLEt(a int(11),bvarchar(20),UNIQUE KEY“ab( a,`b ));
2.预编译SQL
PREPARE iNS FROM “INSERT INTO t SELECT ?,?’;
3.绑定参数并执行
SET @a=999,@b=’hello’;
EXECUTE inS USING @a,@b;
4,释放资源
DEALLOCATE PREPARE ins;
六、MyBatis防注入实战

  1. #与$的核心区别

:自动加引号,预编译处理;支持防注入(推荐),适用普通参数传递。

$:直接拼接SQL;不支持防注入;适用动态表名/列。

  1. 示例

select id,username from user where username =#{username,jdbcType=VARCHAR} <!– 风险写法($拼接)
select id,username from user where username =${username,jdbcType=VARCHAR]

声明:来自bisal的个人杂货铺,仅代表创作者观点。链接:http://eyangzhen.com/5055.html

bisal的个人杂货铺的头像bisal的个人杂货铺

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部