Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Безопасность загрузки изображений.
 
 автор: Блондюсик   (15.12.2011 в 18:28)   письмо автору
 
 

Здравствуйте. Я пишу галерею, в которую пользователи смогут добавлять изображения двумя способами: их загрузкой на сайт и добавлением внешней ссылки на картинку с другого сайта. В первую очередь я озадачилась проблемой безопасности этих процессов, но практически не нашла никакой полезной информации.
Понятно, что чтобы защититься от загрузки php-файлов, надо проверять расширения при условии, что php-скрипты в изображениях не выполняются. Но как быть с javascript? Я так поняла из прочитанного, что скрипт может быть в самом файле и в метаданных. Как удалить его и от туда, и от туда? Если что, изменять размер картинки бы не хотелось, хотелось бы качественные изображения. Кроме того, изменение размера, наверное, не повлияет на метаданные.
И второй вопрос. Как быть со вставкой изображения с внешнего сайта? Наверное, надо применить htmlspecialchars к адресу и посмотреть, чтобы он начинался с хттп и заканчивался расширением. Но как, опять же, быть с javascript? Ведь к изменению изображения я доступ не смогу иметь.
Заранее спасибо.

  Ответить  
 
 автор: cheops   (15.12.2011 в 19:02)   письмо автору
 
   для: Блондюсик   (15.12.2011 в 18:28)
 

>Но как быть с javascript? Я так поняла из прочитанного, что скрипт может быть в самом файле и в
>метаданных. Как удалить его и от туда, и от туда?
Имеется в виду в картинке? Ну во-первых его туда довольно трудно поместить, а во вторых с чего бы это ему выполняться... Нет там конечно пытаются пару уязвимостей использовать на уровне операционной системы. Но это настолько прототипные системы и настолько там мороки много, да и закрывали помоему эти дыры... У вас информация откуда, а главное за какой год?

  Ответить  
 
 автор: Блондюсик   (15.12.2011 в 19:19)   письмо автору
 
   для: cheops   (15.12.2011 в 19:02)
 

http://raz0r.name/articles/bezopasnost-zagruzhaemyx-izobrazhenij/
http://www.xaker.name/forvb/showthread.php?t=10833
Датируется 2008 годом. Там в последней статье написано про IE7, им ещё пользуются.
В метаданные (название, какой камерой снято и т.д.) вообще вставить яваскрипт очень легко, но, должна сказать, когда я попыталась вставить туда алерт, то у меня почему-то ничего не сработало.
Даже не знаю, может, я просто паникёр?

  Ответить  
 
 автор: cheops   (15.12.2011 в 19:35)   письмо автору
 
   для: Блондюсик   (15.12.2011 в 19:19)
 

Тут предельно просто, Internet Explorer - это дыра, люди которые им пользуются это осознают. XSS - это не взлом сайта, это взлом пользователя, т.е. его cookie могут украсть (а это как раз забота браузера, следить, чтобы их не воровали). Если вы сами будете пользоваться InternetExplorer, а в cookie у вас будет пароль от всего сайта, злоумышленник может получить доступ ко всему сайту. Если вы сидите под Opera или каким-то другим браузером, вам ничего не угрожает. А IE7, ну антивирусные компании уже лет 5-6 говорят, чтобы им не пользовались ни при каких условиях, те кто продолжает это делать, ну не сломают их на вашем сайте, сломают на другом.

>Даже не знаю, может, я просто паникёр?
Не совсем, к людям нужно относиться по-доброму и это нормально (не нормально обратное поведение). Если вам их жалко, просто не храните в cookie ничего важного и не позволяйте менять пароль без явного ввода старого и вообще на все критичные действия (например, с деньгами) следует требовать повторный ввод пароля. Но вообще оберегать пользователя нужно до определенного порога, дальше которого вам это будет уже накладно.

  Ответить  
 
 автор: Блондюсик   (15.12.2011 в 19:44)   письмо автору
 
   для: Блондюсик   (15.12.2011 в 18:28)
 

Спасибо!

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

  Ответить  
 
 автор: Slo_Nik   (16.12.2011 в 02:34)   письмо автору
 
   для: Блондюсик   (15.12.2011 в 19:44)
 

[поправлено модератором]

  Ответить  
 
 автор: Блондюсик   (16.12.2011 в 08:40)   письмо автору
 
   для: Slo_Nik   (16.12.2011 в 02:34)
 

Это про пхп, а не про яваскрипты =/

  Ответить  
 
 автор: Slo_Nik   (16.12.2011 в 12:19)   письмо автору
 
   для: Блондюсик   (16.12.2011 в 08:40)
 

У Вас предусматривается два варианта:
1) Загрузка на сервер
2)Показ изображения по ссылке
Для первого случая как раз статья, ссылку на которую я дал. Всё таки ознакомьтесь с её содержанием.
Возьмём любое изображение, например .gif
Откроем в блокноте и допишем в конец файла

<?php 
 
echo phpinfo();
?>
<script type="text/javascript">
 alert('hack')
</script>

Если изменить расширение на php, то при загрузке изображение в браузере выполнятся скрипты и getimagesize() при проверке не выдаст ошибки.
Я пробовал обработать такие изображения функциями для работы с графикой, при этом дописаный код удалялся из файла. Не помешает добавить запрет на выполнение скриптов в директории, в которой хранятся изображения.
Из этого я понял, что если даже файл пройдёт проверку функцией getimagesize(), то надо его всё равно обработать функциями работы с графикой, не изменяя размера.
А если для второго случая, то попробуйте отдавать изображение не напрямую по ссылке, а через скрипт, опять же обработав функциями.

p.s. цитата из статьи

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

  Ответить  
 
 автор: Блондюсик   (17.12.2011 в 08:51)   письмо автору
 
   для: Slo_Nik   (16.12.2011 в 12:19)
 

Спасибо! А какими функциями можно обрабатывать, не изменяя размера?
И, плюс, метаданные картинки потеряются, если приводить jpg к jpg?

  Ответить  
 
 автор: Slo_Nik   (17.12.2011 в 12:04)   письмо автору
 
   для: Блондюсик   (17.12.2011 в 08:51)
 

> А какими функциями можно обрабатывать, не изменяя размера?

функции для работы с графикой

>И, плюс, метаданные картинки потеряются, если приводить jpg к jpg?

пробуйте, экспериментируйте....

  Ответить  
 
 автор: Блондюсик   (18.12.2011 в 17:54)   письмо автору
 
   для: Блондюсик   (15.12.2011 в 18:28)
 

Помогите, если не сложно.
Создаю файл, открываю в блокноте, пишу: <?php echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!';die('');?><script>alert();</script> - в конец файла и в метаданные. Вставляю в файл, открываю и максимум, чего добиваюсь - это сообщение ие7 и 8 о том, что используется яваскрипт при просмотре информации о картинке. Сам алерт не выполняется, даже если разрешить его выполнение.
А должен выполняться алерт и показываться надпись "!!!!!!!!!!!..."
Проблемы нет или у меня кривые руки? Может, зависит от версии php и какой-нибудь там подверсии ие7? Если что, версия пхп - 5.2

  Ответить  
 
 автор: Slo_Nik   (18.12.2011 в 20:13)   письмо автору
 
   для: Блондюсик   (18.12.2011 в 17:54)
 

><?php echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!';die('');?>
после die() ни чего выполняться не будет.

файл с каким расширением, php?
вот если взять картинку, открыть в блокноте, дописать код, сохранить с расширением "php", то код выполнится при просмотре в браузере. Дописать вредоносный код в файл этого мало, надо чтобы от ещё и выполнился, а с расширением файла "gif" или "jpg" ни чего выполняться не будет.

но Вам то нужно чтобы не исполнялся код....

p.s. перечитайте ещё раз, внимательно, первую часть статьи, ссылку на которую я давал

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования