Как проверить типы файлов загруженных файлов в PHP?

** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки SQL-инъекции не только полагаются на возможность вставлять X=Y. **

Если злоумышленники пытаются взломать форму с помощью переменной PHP $_GET или с помощью строки запроса URL, вы сможете поймать их, если они не защищены.

RewriteCond %{QUERY_STRING} ([0-9]+)=([0-9]+)
RewriteRule ^(.*) ^/track.php

Поскольку 1=1, 2=2, 1=2, 2=1, 1+1=2 и т. д. ... являются распространенными вопросами к базе данных SQL злоумышленника. Возможно, он также используется многими хакерскими приложениями.

Но вы должны быть осторожны, чтобы не переписывать безопасный запрос с вашего сайта. Вышеупомянутый код дает вам возможность переписать или перенаправить (зависит от вас) эту динамическую строку запроса, зависящую от хакерства, на страницу, в которой будет храниться IP-адрес злоумышленника или EVEN THEIR COOKIES, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.

47
задан Alix Axel 14 May 2011 в 05:36
поделиться

3 ответа

Смотрите на mime_content_type или Fileinfo. Это встроенные команды PHP для определения типа файла путем рассмотрения содержания файла. Также проверьте комментарии к вышеупомянутым двум страницам, существуют некоторые другие хорошие предложения.

Лично мне везло с помощью чего-то, что это по существу system("file -bi $uploadedfile"), но я не уверен, является ли это лучшим методом.

33
ответ дан Darryl Hein 26 November 2019 в 19:52
поделиться

По моему скромному мнению, все методы проверки типа MIME бесполезны.

Говорят, что Вы имеете, который должен иметь тип MIME application/pdf. Стандартные методы пытаются найти что-то, что похоже на заголовок PDF (%PDF- или что-то как этот), и они возвратятся 'Хорошо, кажется, что это - файл PDF' на успехе. Но на самом деле это не делает означает что-либо. Можно загрузить файл, содержащий [только 112], и он передаст проверку MIME.

я имею в виду, имеет ли файл ожидаемый тип MIME - он будет всегда передавать проверку типа MIME иначе, результат не определен.

15
ответ дан Czechnology 26 November 2019 в 19:52
поделиться

Я предполагаю, что Вы собираетесь иметь фиксированный белый список типов файлов, которые Вы примете.

Для каждого из этих типов, Вы оказываетесь перед необходимостью использовать различные методы, чтобы проверить, что они - допустимые примеры того формата.

существует два связанных вопроса:

  • это примерно походит на него, мог бы быть правильный тип? (Для JPEG Вы могли проверить заголовки, как Вы упомянули. Для многих Основанных на Unix форматов Вы могли проверить "волшебный cookie".)

  • он на самом деле допустимый пример того типа (например, Для любого подобного XML формата, Вы могли проверить против DTD.)

я думаю, что для каждого формата необходимо задать отдельные вопросы для каждого, потому что ответ будет очень отличаться для PDFs по сравнению с zip-файлами.

2
ответ дан Oddthinking 26 November 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: