1、两字节编码(gbk)都存在宽字节攻击问题[character_set_client=gbk]
案例:http://www.cnblogs.com/lcamry/articles/5625276.html
解决方案:mysql_query("SET character_set_connection=gbk, character_set_results=gbk,character_set_client=binary");
character_set_client=binary 采用二进制传输,可以解决这个问题
2、两字节编码(gbk)谨慎使用icon,防止攻击
案例:http://www.cnblogs.com/lcamry/articles/5625276.html
3、php header函数使用问题
案例:当使用header函数是如果后面没有die或者exit函数时,程序仍然继续执行。
解决方案:header函数后面添加程序停止函数[exit,die]
4、urldecode、rawurldecode宽字节攻击[a.php?id=%2527]
案例:http://blog.csdn.net/qlxmy/article/details/55252980
解决方案: 通过urlencode处理过后的变量在通过其他函数过滤一下
解析:原因是urldecode吧%25转换成%,然后%27就变成'
5、include、include_once、require、require_once 包含文件时,出现恶意攻击
案例:https://www.secpulse.com/archives/3206.html
http://www.cnblogs.com/mujj/articles/3406740.html
解决方案:
本部分主要从代码层和Web服务器安全配置两个方面来讲解PHP文件包含漏洞的防范。 1、首先来从代码层来讲,在开发过程中应该尽量避免动态的变量,尤其是用户可以控制的变量。一种保险的做法是采用“白名单”的方式将允许包含的文件列出来,只允许包含白名单中的文件,这样就可以避免任意文件包含的风险 2、在Web服务器安全配置方面可以通过设定php.ini中open_basedir的值将允许包含的文件限定在某一特定目录内,这样可以有效的避免利用文件包含漏洞进行的攻击。需要注意的是,open_basedir的值是目录的前缀,因此假设设置如下值:open_basedir=/var/www/test,那么实际上以下目录都是在允许范围内的。 /var/www/test /var/www/test123 /var/www/testabc 如果要限定一个指定的目录,需要在最后加上”/“,这一点需要特别注意。 open_basedir=/var/www/test/ 如果有多个目录,在Windows下目录间用分号隔开,在Linux下面则用冒号隔开。