Я разрабатываю веб-приложение ASP.NET и хотел бы, чтобы пользователь смог или загрузить изображение от их локальной системы или передачу в URL к изображению. Изображение может или быть JPG или PNG. Какие проблемы безопасности я должен быть обеспокоен выполнением этого? Я видел различные способы встроить код в файлах JPG. Есть ли какие-либо методы в C# (или внешние библиотеки), который может подтвердить, что файл является JPG/PNG, иначе бросьте ошибку? По крайней мере я делаю каталог, который содержит загруженные изображения, недоступные для просмотра и помещающие макс. предел размера 1 МБ, но я хотел бы реализовать дальнейшие проверки.
Спасибо за любой совет.
Существуют ли какие-либо методы в C # (или внешних библиотеках), которые могут подтвердить, что файл является файлом JPG / PNG, иначе выдаст ошибку?
Может быть, но это само по себе не помогает. Вы можете легко создать файл, который является одновременно допустимым форматом изображения и , содержащим активное содержимое HTML / сценария, на которое можно наткнуться при сниффинге содержимого IE. Или же следует беспокоиться о неработающих политиках происхождения Java и Flash, которые могут иметь тот же эффект, что и сценарии в контексте безопасности вашего сервера.
Если вы обрабатываете изображение (например, кадрируете, изменяете размер) и повторно сохраняете, это очень и очень затрудняет проведение атак контрабанды контента. Однако вы всегда должны убедиться, что ваши серверные инструменты обновлены, поскольку уязвимости в библиотеках обработки изображений могут подвергнуть вас эксплойту на стороне сервера.
Если вы не можете этого сделать, лучшим решением для устранения всех проблем с внедрением контента будет обслуживание изображений из другого [под] домена, не имеющего доступа ни к одной из конфиденциальных учетных данных (файлы cookie, базовая авторизация) основного сайта.
Если для этой цели используется субдомен, например images.example.com
, ваш основной сайт должен быть доступен только с с по www.example.com
и с , но не с example.com
. В противном случае контент, введенный в images.example.com
, может получить доступ к файлам cookie для example.com
в IE. example.com
следует 301-редирект на www.example.com
, чтобы предотвратить нежелательную утечку файлов cookie в целом.
Добавьте заголовок X-Content-Type-Options: nosniff
к ответу, чтобы заблокировать атаки контрабанды контента из IE8. (Увы, это не помогает с более ранними версиями.)
Также:
Очистка имен файлов, указанных пользователем, является жесткой , особенно если ваше приложение, вероятно, работает на сервере Windows, где действуют правила использования имена файлов действительно сложны. Хорошее место для начала - разрешить использование только буквенно-цифровых символов и добавить собственное расширение файла и префикс. (Префикс необходим, чтобы избежать зарезервированных имен файлов Windows и пустого имени файла.)
Лучше: сохранить указанное пользователем имя файла в базе данных, а не использовать его как настоящее имя файла.
См. этот вопрос для более подробного обсуждения проблем безопасности загрузки файлов.
Не позволяйте пользователю определять имя файла который будет использоваться на вашем сервере. Вместо этого используйте [сгенерированный guid] .jpg и поместите имя файла, которое они использовали, в таблицу базы данных, если вам это нужно.
См. № 12 здесь: http://www.codinghorror.com/blog/2009/01/top-25-most-dangerous-programming-mistakes.html
Внешний контроль имени файла или пути Когда вы используете ввод постороннего человека при создании имени файла, результирующий путь может указывать за пределы предполагаемого каталога. Злоумышленник может объединить несколько последовательностей ".." или похожих , чтобы заставить операционную систему выйти из каталога с ограниченным доступом .Другие атаки, связанные с файлами, упрощаются за счет внешнего управления именем файла, такого как переход по символической ссылке, которая заставляет ваше приложение читать или {{1} }} изменять файлы, к которым злоумышленник не может получить доступ напрямую. То же самое применимо, если ваша программа работает с повышенными правами и принимает имена файлов в качестве входных данных . Аналогичные правила применяются к URL-адресам и разрешают постороннему указывать произвольные URL-адреса.
Также будьте осторожны с URL-адресом, убедитесь, что это абсолютный внешний URL-адрес, чтобы они не могли использовать ваш собственный веб-сервер для копирования конфиденциального файла из вашей локальной сети в область, где они могут получить к нему доступ, поскольку вы будете загружать этот URL-адрес из кода, запущенного на вашем веб-сервере.
Это абсолютное минное поле. Кое-что следует принять во внимание (не обязательно исчерпывающий список, никаких гарантий и т. д.).