Скрипты, встроенные в изображения

Я запускаю небольшую браузерную MMO, и у меня возникает проблема, когда пара пользователей встраивают скрипты в изображения своих профилей и используют их для атак на указанных пользователей и мою игру в целом. Есть ли способ защититься от этого или мне нужно запретить людям использовать свои собственные изображения?

Если это кому-то помогает, это делается в PHP / MySQL.

более конкретная информация о характере атаки очень поможет ... Есть несколько эксплойтов с изображениями, о которых известно ...

paan 27.11.2008 04:46

В частности, откуда берутся изображения профиля - должны ли пользователи указывать URL-адрес или загружать файлы?

Rob 27.11.2008 05:12

пользователи предоставляют свои собственные изображения и URL-адреса, и все становится плохо, когда люди смотрят на них.

watchwood 27.11.2008 05:56

Мы до сих пор не знаем, какие именно «атаки» вас беспокоят. Откуда вы знаете, что происходит что-то вредоносное? Вы говорите об эксплойтах ошибок парсера изображений в браузере, межсайтовом сценарии JavaScript или просто о динамических изображениях, как в ответе Unkwn? (Это совершенно безвредно.)

bobince 27.11.2008 17:52

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

watchwood 27.11.2008 18:50

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

UnkwnTech 29.11.2008 07:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
9
6
423
4

Ответы 4

Некоторые из наиболее распространенных практик проверки целостности изображения включают проверку типа MIME или двоичное чтение первых нескольких байтов изображения. Хотя они не самые лучшие, от некоторых из них стоит попытаться отразить.

Попробуйте заставить GD обработать эти изображения. Если он выдает ошибки, вы знаете, что у вас проблема. Поскольку загрузка изображения - относительно редкая операция, она не должна вызывать проблем с загрузкой из-за каких-либо произвольных манипуляций.

Вы говорите о проблеме, при которой IE интерпретирует изображение с HTML-тегами в нем как HTML-страницу, что позволяет внедрять HTML и скрипт из изображений, отправленных пользователем?

(Ошибка в том, что IE будет делать это, даже если вы укажете ему Content-Type как изображение / тип. Microsoft вызвала бесконечные нарушения безопасности, пытаясь быть «полезными».)

Если это так, обычным решением является обслуживание отправленных пользователем изображений с другого имени хоста, у которого нет доступа к файлам cookie или сценариям на основном имени хоста, с которого вы обслуживаете свое веб-приложение.

Обязательно заблокируйте свои виртуальные серверы, чтобы сервер изображений и сервер приложений были доступны только с одного конкретного имени хоста (а сервер приложений не должен быть доступен через IP-адрес).

Это устранит проблемы межсайтового скриптинга. У вас все еще могут быть запросы на подделку межсайтовых запросов, но это уже другая проблема, и ее можно использовать без внедрения сценария, обернутого изображениями.

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

- Решил предоставить образец
Это изображение создается на лету, я даю URL: http://unkwndesign.com/profilePic.png:
альтернативный текст http://unkwndesign.com/profilePic.png
теперь profilePic.png - это папка, которая по запросу предоставляет index.php, который, используя gd, получает логотип SO и накладывает на него ваш IP-адрес, чтобы было предельно ясно: Я НЕ ЗАПИСЫВАЮ ЭТИ ИЛИ ЛЮБЫЕ ДРУГИЕ ДАННЫЕ источник index.php:

<?php
$image = imagecreatefrompng("http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png");
$font_size = 12;
$color = imagecolorallocate($image, 0,0,0);
ImageTTFText ($image, $font_size, 0, 55, 35, $color, "arial.ttf",$_SERVER['REMOTE_ADDR']);
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

Поскольку я возвращаю изображение с правильным расширением и правильным mime-типом, невозможно определить, что я делаю. Если бы сервер загрузил мое изображение и сохранил его локально, IP-адрес был бы IP-адресом сервера, что испортило бы удовольствие от этого и, вероятно, оказалось бы достаточно обескураживающим фактором, чтобы остановить поведение.

Вы уверены, что ваш веб-сервер не регистрирует это по умолчанию? :)

Tom 15.12.2008 18:47

Конечно, мой веб-сервер регистрирует это, но я предполагал, что это предполагалось. Точно так же следует предположить, что ваш интернет-провайдер также зарегистрировал соединение с моим сервером.

UnkwnTech 17.12.2008 05:21

Другие вопросы по теме