2-文件类型绕过
请求头的Content-Type绕过

$_FILES 是 PHP 中用于接收通过 HTTP POST 方式上传的文件的超全局变量。当表单设置 enctype="multipart/form-data" 时,上传的文件信息会被自动填充到 $_FILES 中。
php
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
# 通过$_FILES变量拿到 input标签名为upload_file的值,通过['type']获取文件类型 必须是jpeg或者png、gif,否则提示文件类型不正确,请重新上传.
# 然后通过['tmp_name']获取文件名存到临时变量中,然后再$img_path 变量中整合完整的上传路径。
# 最后一层if,是判断移动文件时 是否出现错误,比如可能权限问题导致了 移动失败,就会提示上传出错
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
基本结构
对于单个文件字段(例如 <input type="file" name="upload_file">),$_FILES['upload_file'] 是一个包含 5 个键的二维数组:
| 键名 | 说明 | 示例 |
|---|---|---|
name |
客户端原始文件名(可含路径,但浏览器通常只传文件名) | "avatar.jpg" |
type |
浏览器提供的 MIME 类型(不可信,可伪造) | "image/jpeg" |
tmp_name |
服务器上存储临时文件的完整路径(通常是 /tmp/phpxxx) |
"/tmp/php6Y5e3f" |
error |
上传错误码(0 表示成功) | 0 |
size |
文件大小(字节) | 102400 |