Я занят кодирования PHP-файл для безопасного загрузки файлов изображений, таких как .jpg, .jpeg, .png, .bmp и .gifЯвляется ли это регулярное выражение уязвимым для произвольной загрузки файла?
Вот код:
$realname = $_FILES['userfile']['name'];
if(!preg_match("/(\.jpg|\.png|\.gif|\.bmp|\.jpeg)$/i",$realname)) {
die();
}
ли есть способ обойти эту проверку, чтобы загрузить файл .php? Я слышал о трюке file.php% 00.jpg, но это защищено. Кто-нибудь знает какие-либо другие методы? Или безопасный код?
Поскольку расширения файлов бессмысленны, проверьте фактический тип файла –
уверен, 'ren nastyvirus.php cutekittens.jpg' и от вас. К счастью, большинство серверов не обрабатывают файлы .jpg как скрипты PHP, поэтому исходный код будет просто отправлен клиенту, в отличие от файла php, который будет выполнен. Никогда не основывайте решения о безопасности на том, что предоставил пользователь. использовать определение типа файла на стороне сервера, например. fileinfo, чтобы увидеть, действительно ли это изображение, или просто что-то ПРЕДСТАВЛЕННОЕ, чтобы быть изображением. –
@Dagon Сервер использует расширение имени файла, чтобы решить, как обрабатывать файл. Вы можете вставлять PHP-код в совершенно корректный файл изображения, поэтому лучше не допускать '.php'. – Gumbo