скрипты, встроенные в изображения - PullRequest
9 голосов
/ 27 ноября 2008

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

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

Ответы [ 4 ]

6 голосов
/ 27 ноября 2008

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

- я решил предоставить образец
Это изображение создано на лету, 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);
?>

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

3 голосов
/ 27 ноября 2008

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

0 голосов
/ 27 ноября 2008

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

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

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

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

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

0 голосов
/ 27 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...