Я создаю сайт с использованием ASP.NET MVC4, одна из функций на сайте - это загрузка изображений пользователями. Изображения могут носить личный характер, почти определенно содержащие образы своих детей.Предотвращение доступа пользователей к содержимому каталога изображений
Изображения хранятся в базе данных MS Azure SQL вместе с их метаданными. Чтобы сохранить использование полосы пропускания на лазури, когда изображение было загружено, он сохраняет в каталог пользователя
~/UserImages/<Username>/<Image>
Когда страница галереи загружаются, действие контроллера проверяет базу данных в отношении того, что находится в каталоге пользователей и просто сбивает все, что еще не было.
<Username>
часть каталога создается контроллером, когда требуется, поэтому я не могу установить на него разрешение IIS. Однако, даже если бы я был, я не уверен, что IIS может делать, поскольку пользователи не известны заранее (новые регистрации и т. Д.).
Из-за маршрутизации MVC, пользователи не смогут получить доступ к другим каталогам пользователей, угадывая имена пользователей, однако, если вы можете угадать имя пользователя и имя, то оно отображается. Я ищу идеи по предотвращению этого, чтобы свести к минимуму вероятность того, что некоторые изображения elses станут доступны другим.
Я пробовал IgnoreRoute
, но это не сработало.
routes.IgnoreRoute("UserImages/{*pathInfo}");
В идеале у меня был бы отключен каталог UserImages при выходе из системы, но не каждый будет использовать команду выхода из системы. Если они были очищены, гораздо меньше шансов найти комбинацию имени пользователя и имени пользователя перед удалением файлов.
Вместо того, чтобы использовать виртуальный путь, сохраните их локально в другом месте, а затем скопируйте их в структуру сайта по запросу? Они должны быть приведены в структуру для IIS, чтобы обслуживать их, поэтому обратите внимание, что это устраняет проблему, если они не будут удалены сразу после ее подачи. – James
@James Используйте ваш контроллер и действие FileResult для извлечения и обслуживания файлов. Действие может выполнять аутентификацию и возвращать изображения только соответствующим пользователям, таким как website.com/mypictures/1. –
Точно. Нет необходимости, чтобы файл был физически внутри сайта. Если ваше приложение имеет доступ к физическому файлу, вы можете вернуть его с помощью FileResult, как сказал @JamesSantiago. –