目录
上传类型漏洞的总体防御原则
不同环境上传漏洞的防御方法
一、上传漏洞防御原则
- 核心思想:确保上传的文件不会被服务器解析成可执行的脚本,进而引发遍离功能设计的意外后果。
- 限制文件上传类型:白名单结合黑名单:黑名单常常会出现遗漏或者大小写绕过等问题,所以通常采用白名单限制安全的文件类型如:
图片:.jpg、.png、.gif、.bmp 文档:.doc、.pdf、.txt 压缩包:.rar、.zip
类型限制前端结合后端限制。
扩展名检测,需要防范%截断或者文件名包含空格等特殊字符的绕过方式;重命名用户上传的文件,杜绝上传时的文件名攻击。
对于图片上传,可以考虑对其进行二次渲染/压缩
3、限制上传文件大小
- 限制上传文件的大小,防止由于内存,磁盘耗尽造成的拒绝服务。 可以配置web server允许的最大post大小
- 可以在代码层面获取上传文件的大小,根据文件类型的不同进行进一步的过滤
4、确保上传的文件被访问正确访问
- 将文件上传目录设置为静态资源目录,防止被解析为执行脚本 使用代理页面隐藏文件真是路径
- 使用上述方式时,确保Content-Type与实际类型一致
- 如果文件不允许在页面展示,仅允许下载请设置Content-disposition:attachment
5、上传漏洞防御原则
- 确保上传的文件放在安全的路径下,必要时可将上传的文件存放于web server之外的远程服务器
- 确保web server版本为最新,防止由于web server漏洞造成的文件意外解析
部分文件上传攻击会北河本地其他漏洞进行,所以也要保证web服务器减少其他可利用漏洞。
二、IIS6.0文件解析漏洞(防御方法)
1、防御方法:升级IIS版本,IIS5.1与7.5均无此漏洞
2、Apache文件解析漏洞:
不要使用AddHandler,改用SetHandler,写号正则b,就不会有解析问题
<FilesMatch".+\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
禁止.php.这样的文件执行
<FilesMatch".+\.ph(p[3457]?|t|tml)\.">
Require all denied
</FilesMatch>
3、Nginx文件解析漏洞
- 将php.ini文件中的cgi.fix_pathinfo的值设为0。这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404
- 将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions后面的值设为.php
4、防御方法
- Tomcat任意文件上传漏洞环境较为苛刻,将Tomcat、jdk、php更新 避免开启可、通过PUT方式传经JSP文件的功能