SQL注入常见问题之在sql注入中英文符号和中文符号的影响

文章目录

  • 前言
  • 一、语法解析差异
  • 二、 绕过过滤机制
  • 三、 编码问题
  • 四、 注入效果差异
  • 总结


前言

作为初学者的我在学习SQL注入中总是遇到了很多问题,很多时候都非常困惑,现在我把我的问题汇总出来,以帮助有需要的同学。


一、语法解析差异

英文符号:SQL 语法严格要求使用英文符号(如 '、"、;、-- 等)。若使用中文符号(如全角 ‘’、;、—— 等),可能导致数据库解析失败,攻击语句无法执行。
示例:

-- 正确(英文引号)
SELECT * FROM users WHERE username = 'admin';
-- 错误(中文引号)
SELECT * FROM users WHERE username = ‘admin’;  -- 语法错误

二、 绕过过滤机制

部分 Web 应用仅过滤英文符号(如 '、"),但未处理中文符号。攻击者可利用这一漏洞,使用中文符号构造注入语句,绕过简单的字符过滤。
示例:

-- 被过滤的攻击语句(英文引号)
' OR 1=1 --
-- 绕过过滤的攻击语句(中文引号)OR 1=1 ——

三、 编码问题

中文符号的编码(如 UTF-8、GBK)可能与英文符号不同。若数据库或应用未正确处理编码,可能导致注入失败或意外行为。
示例:
中文引号 “” 在 UTF-8 中占用 E2 80 9C 和 E2 80 9D 三个字节,而英文引号 " 是单字节 22。
数据库可能将中文符号视为普通字符而非语法符号,导致注入失败。

四、 注入效果差异

英文符号:可直接闭合字符串或注释,破坏 SQL 语句结构。
中文符号:若被数据库视为普通字符,可能无法闭合字符串或触发注释,导致注入失败。但在某些场景下,可能因编码转换错误意外触发漏洞。

总结

输入验证:严格校验输入内容,同时过滤中英文符号(如 '、“、;、; 等)。
转义处理:使用数据库提供的转义函数(如 PHP 的 mysqli_real_escape_string)或预处理语句(Prepared Statements)。
编码统一:确保数据库、应用层和前端编码一致(如 UTF-8),避免因编码差异导致的安全漏洞。
通过以上措施,可有效防范中英文符号引发的 SQL 注入风险。

你可能感兴趣的:(SQL专栏,sql,数据库,oracle,mysql,网络安全,web安全)