SQL注入四种类型详解:原理、利用与防御 1. 什么是 SQL 注入SQL 注入是指攻击者将恶意 SQL 代码插入到输入参数中应用程序未进行过滤便将其拼接到 SQL 查询语句中导致数据库执行了非预期的命令。一句话解释就是你输入的内容被直接当作代码执行了2. 四种常见类型2.1 联合查询注入原理利用 UNION 关键字将攻击者的查询结果拼接到正常查询结果后面在页面上回显。步骤1. 猜列数1 ORDER BY 1 --2. 找显示位-1 UNION SELECT 1,2,3 --3. 查数据-1 UNION SELECT 1,database() --示例-1 UNION SELECT 1, table_name FROM information_schema.tables WHERE table_schemadvwa --适用条件页面有显示位能直接看到查询结果。2.2 报错注入原理利用 updatexml() 或 extractvalue() 函数故意构造非法 XPath 路径触发数据库报错在错误信息中带出数据。示例1 AND updatexml(1, concat(~, database(), ~), 1) --适用条件页面能显示 SQL 报错信息。2.3 布尔盲注原理页面只有两种状态“存在”/“不存在”通过构造布尔条件逐位猜出数据。猜长度1 AND LENGTH(database())4 --以此类推。猜字符1 AND SUBSTRING(database(),1,1)d --以此类推。适用条件页面无数据显示但能区分“真/假”状态。2.4 时间盲注原理通过 SLEEP() 函数制造时间差根据页面响应时间判断条件是否成立。示例1 AND IF(LENGTH(database())4, SLEEP(5), 0) --适用条件页面没有任何变化只能靠响应时间判断。3. 防御 SQL 注入最有效的方法是参数化查询预编译语句。将 SQL 代码与数据分离用户输入永远不会被当作代码执行。其他防御措施对输入进行过滤与转义最小权限原则关闭错误回显隐藏数据库报错信息4. 总结SQL 注入的本质是用户输入被拼接到了 SQL 语句中。防御的核心是不信任用户输入使用参数化查询是根本解决手段。**免责声明**本文所有操作均在自建虚拟机环境中完成仅用于网络安全学习与研究。严禁用于任何非法用途违者自行承担后果。