我正在构建一个 php 文件 uploader ,但我遇到了一些安全问题。例如,我不想允许“.php”文件上传。据我所知,检查文件类型的唯一方法是使用 $_FILES['file']['type']
,它的值取决于浏览器。
我检查了多个浏览器,发现在选择常规 .php 文件时,不同的浏览器返回这些值:
firefox: application/x-download
chrome: text/plain
safari: text/plain
IE: text/plain
opera: application/octet-stream
我也尝试过对常规 .txt 文件进行相同的实验,所有浏览器都返回 text/plain
作为 mime 类型。
那么问题来了,如果我想允许 .txt 文件上传,我应该怎么做才能阻止 .php 文件上传?
最佳答案
不要依赖客户端发送的信息。甚至客户端发送的媒体类型也是可以伪造的。
如果您不想允许 PHP 文件,只需不允许文件扩展名为 .php
的文件或将其更改为 .txt
:
if (strtolower(strrchr($_FILES['file']['name'], '.')) == '.php') {
// has file extension .php
}
关于php - 上传时检查文件类型,以及浏览器依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027686/