Новый парень задает вопрос, что должно быть выполнено с помощью простых решений.проверка сервера загрузки файлов - разрешить только изображения с php
Я пробовал кучу кода. Кажется, я могу получить поток файлов для getimagesize и заставить другие вещи работать без сбоев.
Я убираю старый проект, который должен ограничивать загруженные файлы, чтобы они были только файлами изображений и ничего зла.
Этот код всегда дает мне сообщение об ошибке независимо от того, что
$imageinfo = getimagesize($_FILES['bf_file'][$key]['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
alert ("Sorry, we only accept GIF and JPEG images");
exit;
}
Вот черный список усилий
$blacklist = array(".php", ".phtml", ".php3", ".php4", ".js", ".shtml", ".pl" ,".py"
,".txt", ".doc");
foreach ($blacklist as $file)
{
if(preg_match("/$file\$/i", $_FILES['bf_file'][$key]['tmp_name']))
{
alert "ERROR: Uploading executable files Not Allowed\n";
exit();
}
}
Вот еще один getimagesize
$size = getimagesize($_FILES[bf_file][$key][tmp_name]);
$fp = fopen($_FILES[bf_file][$key][tmp_name], "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
continue;
} else
// error
alert("Inappropriate file type");
На каждой из них Я получаю сообщение об ошибке независимо от того, загружен ли файл или нет.
Мне просто нужно разместить эти элементы управления где-нибудь в моем файле, чтобы, если загруженный файл прошел проверку, все просто проходит через загрузчик, а все остальное работает так, как должно, но без преимуществ этих ограничителей и проверок.
Кроме того, пользователю не требуется загружать файл. Есть 3 поля, тема, загрузка файлов и файлов. Только субъект и тело должны иметь данные, и это работает прямо сейчас.
Любая помощь будет принята с благодарностью.
Спасибо,
Джеймс
Какова ценность '$ key'? Независимо от того, что он содержит, из-за некоторой глупости * премиум-класса со стороны некоторых авторов PHP давным-давно вам нужно будет ссылаться на '$ _FILES ['bf_file'] ['tmp_name'] [$ key]' вместо из '$ _FILES ['bf_file'] [$ key] ['tmp_name']'. Также обратите внимание, что 'getimagesize()' - единственный разумный способ сделать это, я даже не могу начать объяснять, что не так с вашим черным списком, на небольшом пространстве, которое дает мне комментарий. – DaveRandom
Вот один: ваш preg_match не является многострочным, поэтому уязвим для пропущенных атак. Одна из тысячи причин использовать белый список, а не черный список. Кроме того, вам действительно нужно копировать данные пикселей с изображения, вы уязвимы для злоумышленника, загружающего файл изображения, содержащий встроенный серверный скрипт, если вы просто сохраните файл как есть. – Cheekysoft
@Cheekysoft, также, 'index.php5' (он может существовать) и' index.php.fr' ([согласование контента] (http://httpd.apache.org/docs/current/content-negotiation.html)) – xfix