【发布时间】:2016-10-06 19:48:10
【问题描述】:
所以我有这个脚本用于将图像上传到服务器。 它允许 jpg 和 png 并将文件重命名为随机的 6 位数字。
<?php
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
$file_name = $file['name'];
$file_tmp = $file['tmp_name'];
$file_size = $file['size'];
$file_error = $file['error'];
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
$allowed = array(
'jpg',
'png'
);
if (in_array($file_ext, $allowed)) {
if ($file_error === 0) {
if ($file_size <= 10000000) {
$file_name_new = mt_rand(100000, 999999) . '.' . $file_ext;
$file_destination = 'files/' . $file_name_new;
if (move_uploaded_file($file_tmp, $file_destination)) {
echo "<a href='$file_destination'>$file_name_new</a>";
}
}
}
}
}
?>
一切都很好。它只允许具有指定扩展名 .jpg 和 .png 的文件。
我遇到的问题是您可以将 script.txt 等 txt 文件重命名为 script.txt.jpg 并且服务器会允许这样做,但是它实际上不是图像。这提供了攻击的脆弱性。
我是否可以添加一些内容来实际验证正在上传的文件是图像?我听说过一些关于 getimagesize 的信息,但我不确定。我对php很陌生。
【问题讨论】:
-
是的,
getimagesize是通常的做法。
标签: php file-upload image-uploading