Риски безопасности или проблемы с использованием контроля FileUpload на asp.net - и предлагаемые решения
Мне нужно создать утилиту, с помощью которой пользователь сможет загружать отдельные или несколько файлов с использованием элемента управления asp.net FileUpload Server.
Я ищу проблемы безопасности для того же. Какие моменты нужно помнить, которые нарушают безопасность. На мой взгляд, одна из основных проблем связана с вирусами.
- Как запросить у пользователя вирусы и прекратить загрузку
- Как проверять файлы на вирусы во время загрузки
Там может быть несколько рисков безопасности. Пожалуйста, обсудите проблемы / риски с предлагаемыми решениями.
Любой ответ для этого наиболее заметен.
заранее спасибо
2 ответа
Все риски связаны с тем, что непослушные люди будут загружать вещи, которые могут выполняться на компьютере веб-сервера и вызывать проблемы.
Прагматичный способ предотвращения проблем, связанных с загрузкой вредоносных файлов, заключается в ограничении типов файлов, которые будет принимать ваш сервер, путем проверки PostedFile.ContentType
имущество. Это идентифицирует MIME-тип. Лучше всего исключить такие вещи, как .exe
и, конечно же, есть проблемы с макросами и автоматизацией VBA в файлах, сгенерированных MS Office, таких как .doc
а также .xls
,
Здесь есть "как": как ограничить тип файла в элементе управления FileUpload
Зависит от моего опыта разработки систем общего доступа к файлам, проверка расширений файлов проста, но недостаточно, в iis 6 была ошибка, из-за которой хакеры могли обойти эти проверки, добавив ";" к части имени файла и загрузите их shell-скрипты как изображение!
Лучший способ - сохранить загруженные пользователем файлы на одну папку выше корневой папки сайта, например, если папка вашего сайта:
C:\ хостинг-пространства \ MyUser \ mydomain.com \ WWW-корень \
Ваш код должен сохранять файлы в:
C:\ хостинг-пространства \ MyUser\mydomain.com\USERUPLOADs\
по этой причине пользователь iis не может иметь прямой доступ к загруженному вирусу или шелл-скрипту!
и использовать файл.aspx для косвенного чтения файлового потока.
<img src="/loadfiles.aspx?name=?????" />
много преимуществ, например, вы можете написать счетчик статистики или проверить сеанс пользователя или избежать межсайтового доступа к вашим пользовательским файлам, но когда вам понадобятся некоторые навыки кодирования, чтобы добавить поддержку возобновления загрузки для файлов объятия и позаботиться о времени ожидания сценария а также...
и другое решение, которое я сам не тестировал, - это использовать web.congif, чтобы избежать разрешения запуска сценария из папки загрузки:
<location path="upload">
<system.webServer>
<handlers accessPolicy="Read" />
</system.webServer></location>