概述
1.将文件上传目录的所有用户执行权限全部取消
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响
例:apache
我们可以利用.htaccess(该文件一定要禁止.上传,否则被重写了解析规则,那么这种防御方式就不存在了)文件机制来对web server行为进行限制,有以下几种形式
1.指定特定扩展名的文件的处理方式
AddType text/plain .pl .py .php4
原理:是指定Response的Content-Type
这种情况下,以上几种脚本文件会被当作纯文本来显示出来,也可自行选择替换Content-Type
2.完全禁止特定扩展名的文件被访问
Options -ExecCGI
AddHandler cgi-script .php .pl py .jsp .asp .htm .shtml .sh .cgi
在这种情况下,以上几种类型的文件被访问的时候,会返回403 Forbidden的错误
3.强制web服务器对于特定文件类型的处理
<FilesMatch".(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
ForceType text/plain
以上规则里的后缀的文件会执行为纯文本,也可自行添加其他
与第一条不同的是,此方法直接强行让apache将文件识别为你指定的类型,而第一种是让浏览器
4.只允许访问特定类型的文件
<Files^(.jpeg|jpg|.png|.gif)>
Order deny,allow
Deny from all
只允许访问以上几种文件
2.判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外, 对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码,或者在使用白名单的时候,使用分割字符串(上传来的文件名),使用"."来分割,仅允许分割后,字符串只有两个,一个是文件名,一个是文件扩展名。
3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4.单独设置文件服务器的域名
把网站服务器和文件服务器分开,但是要保证,文件服务器的安全级别很高,且保证上传文件是相对高的可靠,直接把上传的图片等文件存储在文件服务器,并在文件服务器把所有目录设置为可读可写不可执行
5.二次渲染
原理
将上传的图片重新保存为一个新的图片,将里面可能含有的的可执行代码删除
源代码
<?php
$newimg=imagecreatefromjpeg("2.jpg");
imagejpeg($newimg,"3.jpg");
?>
函数
1.imagecreatefromjpeg(“2.jpg”);
由文件或者url创建一个新图像
参数:jpeg图像路径(选择图像)
返回值:成功返回图像资源,失败返回false
2.imagejpeg($newimg,“3.jpg”);
从 image 图像以 filename 为文件名创建一个 JPEG 图像
参数1:image( imagecreatetruecolor() 函数的返回值) 参数2:(filename新文件保存路径) 参数3:quality(为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大),默认为 IJG 默认的质量值(大约 75))
返回值:成功返回true,失败返回false
最后
以上就是受伤季节为你收集整理的文件上传漏洞之——漏洞防御的全部内容,希望文章能够帮你解决文件上传漏洞之——漏洞防御所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复