Может ли загрузка и изменение размера загруженного изображения быть опасной? - PullRequest
1 голос
/ 29 октября 2010

У меня есть форма ASP.NET с возможностью загрузки, чтобы пользователи могли публиковать изображения. На сервер я загружаю это изображение (используя класс Bitmap) и изменяю его размер.

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

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Лучший хакер может надеяться на использование эксплойта Buffer Overflow, затем он пишет вредоносный код в память сервера.Однако из того, что я прочитал, такое может произойти только при использовании небезопасного кода, и, поскольку Bitmap полностью управляется, я уверен, что его можно безопасно использовать.

Однако, действительно умный хакер может обмануть Bitmapи создайте «пользовательский» файл изображения, который будет совершенно корректным изображением, но также будет содержать код «автостопщика», который может привести к повреждению при просмотре в браузере с использованием некоторых будущих уязвимостей.Поэтому самый безопасный способ - сохранить само растровое изображение на диск вместо необработанного загруженного файла, то есть использовать метод bitmap.Save вместо метода SaveAs в HttpPostedFile.Таким образом, любой дополнительный код будет опущен, поскольку растровое изображение не будет загружать его, и ваши посетители будут в безопасности.

Кстати, вы можете хранить загруженные файлы вне корневой папки сайта и создавать «прокси»msgstr "файл для чтения из папки: таким образом, пользователи не смогут просматривать изображения напрямую, им придется использовать прокси-файл.Это полезно, если в какой-то момент вы добавите механизм разрешений, например, пользователь A не сможет увидеть, что загружено пользователем B.

0 голосов
/ 29 октября 2010

Я бы:

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

Переименуйте файл один раззагружен, поэтому кто-то загружает не знает созданное им имя файла.

Убедитесь, что каталог для загрузки имеет минимальные разрешения.

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

...