文件上传漏洞是指上传了恶意脚本,然后通过执行恶意脚本来发送 hack 攻击,是非常常见的攻击手段,同时危害特别大。那么该如何防范,步骤如下
- 前端检查
检查上传文件的后缀是否在后缀白名单中。作用不大,但是还是要做
- 后缀检查
当文件上传到后端时,需要再一次检查文件后缀是否在后缀白名单中。依旧是作用不大,但是还是要做
- 检查 MIME
MIME 也就是文件类型,浏览器上传的时候,都会通过 Content-Type 将 MIME 传过来,但是由于 hacker 一般会使用工具进行上传,比如 Burp Suite,所以 Content-Type 是可以被篡改的。所以不单单要检查 Content-Type 是否在 MIME 白名单中,还要检查上传过来的文件的 MIME。在 PHP 中可以通过 Fileinfo 获取文件的 MIME
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file('./demo.png');
echo $mimeType . "\n";
// image/png
我们来假设一个如果没检查后缀和 MIME 而导致被上传了恶意 PHP 脚本
// hacker.php
<?php
@eval($_GET['apply']);
一般会用 $_POST
多点,但是为了演示,我们这里使用 $_GET
。启动服务
php -S 127.0.0.1:9000
在 URL 地址栏输入
http://127.0.0.1:9000/hacker.php?apply=echo%20%22Hello%20World%22;
然后你就能在浏览器上看到 Hello World
了
- 静态资源访问后缀白名单
- 静态资源目录不给可执行权限
这个主要是防止万一被上传了可执行文件的情况,防不了 PHP 脚本这类的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。