文件上传的攻击方式php
1、JS检测绕过html
一、使用浏览器插件,删除检测文件后缀的js代码,而后上传文件便可绕过浏览器
二、先把须要上传的文件后缀改为容许上传的格式,经过js校验,抓包把后缀名改成可执行文件的后缀上传实现绕过服务器
2、文件后缀绕过函数
Apache的解析顺序是从右到左解析文件后缀的,若是最右侧的扩展名不可识别,继续往左判断,直到遇到能够解析的扩展名为止。网站
好比:xxx.xls.xxx.xxx.xxx 由于后缀xxx不能够解析,因此向左解析后缀,最后解析出来是一个Excel表格插件
看道哥那本书上写的是在1.x,2.x版本下有这个解析问题,如今使用的都是6,7甚至更高版本htm
3、文件类型绕过图片
若是服务器代码是经过Content-Type的值来判断文件的类型,那么就存在被绕过的可能。文件上传
Content-Type的值是客户端传递的,是能够任意修改的。
4、文件截断绕过
%00表明结束符,有可能会把后边的字符删掉。
http://www.xxx.xom/jieshu=111
把111改成 1.php%00a.jpg,文件被保存到服务器时,%00会把“a.jpg”截断,保存到服务器的是1.php
5、竞争条件攻击
一些网站是先容许上传任意文件,而后检查上传文件是否包含特殊脚本,若是有则删除文件。这就存在上传和检验的时间差问题。
能够事先写好 一句话,还没校验完成程序读取来内容就直接给我返回。
6、文件内容绕过
前256个字节是合规的,在后边加上可攻击脚本
修复方案
一、文件上传的目录设置为不可执行,去掉x
二、判断文件类型,建议使用白名单的形式,对于图片的处理可使用压缩函数或者resize函数,处理图片的同时破坏图片中可能包含的html代码
三、使用随机数改写文件名和文件路径
四、单独设置文件服务器域名(若是有条件),因为浏览器的同源策略一系列客户端攻击将失效。