防止sql手工注入
在php+mysql中, 可以通过转义特殊字符来防止污染sql语句(防注入),
有两种情况:
- 魔术引号, magic_quote_gpc 开关,不过高版本的PHP将去除这个特性
- 安全函数, addslashes,mysql_real_escape_string,mysql_escape_string等。
宽字节注入
上有计策下有对策, 当程序员设置数据库编码与php编码为不同的两种编码,那么就可能产生宽字节注入, 也称GBK双字节绕过。
也可以采用编码绕过。
涉及的基本概念
- 字符、字符集
字符(character)是组成字符集(character set)的基本单位。对字符赋予一个数值(encoding)来确定这个字符在该字符集中的位置。
- UTF8
由于ASCII表示的字符只有128个,因此网络世界的规范是使用UNICODE编码,但是用ASCII表示的字符使用UNICODE并不高效。因此出现了中间格式字符集,被称为通用转换格式,及UTF(Universal Transformation Format)。
- 宽字节
GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。
1. 引发原因
php编码为utf-8, 而mysql的编码设置为set names 'gbk'或set character_set_client=gbk,php中编码为gbk,函数执行添加的是

本文深入探讨了宽字节注入的原理与实践,包括利用GBK双字节绕过的技巧,以及如何通过特定编码组合实现SQL注入。同时,文章提供了安全应对方案,如使用mysql_set_charset和mysql_real_escape_string确保应用程序安全。
最低0.47元/天 解锁文章
312

被折叠的 条评论
为什么被折叠?



