2014-06-29 2 views
0

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

Мы хотим знать, как мы можем использовать ImageResizer для защиты от таких атак, как бомба сжатия, содержимое JAR, полезная нагрузка, exif-экспозиции и искаженные данные изображения.

Я думаю, что знаю, как их решать в целом, но я хотел бы знать, какие конкретные инструменты предлагает ImageResizer.

ответ

2

Большинство адаптеров данных ImageResizer предлагают настройку конфигурации «untrustedData = true».

Эта настройка, в свою очередь, устанавливает &process=always в запросе в течение ImageResizer.Configuration.Config.Current.Pipeline.PostRewrite.

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

Когда установлено process=always, все изображения перекодированы и лишены данных exif, чтобы предотвратить попадание потенциально вредоносных изображений в браузер. Это означает, что клиент получит ошибку 500 вместо искаженного изображения.

Как изображение интерпретируется, однако, так же важно. Если вы разрешаете загрузкам пользователей сохранять исходное имя файла или просто расширение (вместо того, чтобы выбирать из белого списка), вы открываете себя для простых векторов атак. Точно так же, если изображение установлено в браузере с помощью mime-типа javascript, клиент может интерпретировать его как javascript и получить XSS'd. Конвейер ImageResizer работает с белыми списками, чтобы это не происходило.

Кроме того, если вы намерены повторно кодировать все загрузки, это может быть проще сделать на этапе загрузки, а не при каждом запросе. Однако это зависит от безопасности вашего хранилища данных и быть уверенным, что никакие загрузки «как есть» не могут быть успешными.

+0

Я действительно думаю, что хочу перекодировать один раз, при загрузке. Я не уверен, что вы подразумеваете под этим «это зависит от безопасности вашего хранилища данных и быть уверенным, что никакие« как есть »загрузки могут быть успешными». Я думаю, что я попытаюсь перекодировать, опираясь на ImageResizer на сообщите мне, есть ли проблема, например, недопустимое изображение. В идеале, если это произойдет, я бы заменил изображение запаса, указывающее на ошибку. Кроме того, вы могли бы объяснить функцию «белый список»? Что получает белый список? –

+0

1) Если вы принимаете публичный доступ к хранилищу S3, не имеет значения, если вы повторно кодируете во время загрузки, направляемой через ваш сервер приложений. 2) Если вы используете ImageResizer HttpModule, он будет обслуживать только изображения с типом изображений. –