Как обезопасить загруженные пользователем файлы - PullRequest
3 голосов
/ 19 октября 2011

У меня есть проект asp mvc. И в него я добавил структуру каталогов:

...
  UserUploads
    User_1
      Images
        Original
        Thumb
        Display
    User_2
    User_n
...

Как сделать эту структуру папок невидимой для пользователей? Я не хочу, чтобы неавторизованные пользователи видели эти изображения, набирая URL. У каждого пользователя есть свои изображения, и только пользователь, который является «другом» какого-либо пользователя, может видеть его изображения. Я проверил изображения на Facebook и адрес изображения:

http://a4.sphotos.ak.fbcdn.net/hphotos-ak-ash4/296040_2530953916384_1329592446_32898884_1499197273_n.jpg

Итак, как лучше защитить файлы, загруженные пользователем?

Ответы [ 2 ]

5 голосов
/ 19 октября 2011

Ну, вы можете использовать 2 подхода:

  1. реальная безопасность - полностью ограничить доступ к структуре папок и использовать только некоторые HttpHandler (или действие MVC) для их обслуживания (после оценки прав доступа, записи их в ответ через TransferFile или потоковую запись ...). Это очень плохо с точки зрения производительности - нет кэширования, вся обработка на стороне сервера для каждого изображения и т. Д.

  2. безопасность «обфускации» - просто сгенерируйте имена файлов, которые невозможно угадать (Guid - хороший кандидат), поэтому никто без доступа к странице, которая сгенерирует свое имя файла в HTML, не сможет получить к ним прямой доступ. Конечно, если один «друг» обращается к нему, а затем передает URL-адрес файла неуполномоченному лицу, но он может так же легко отправить ему сам файл ... Таким образом, производительность очень хорошая - файлы кешируются (IIS и клиентом). ), ваше приложение не должно обрабатывать запросы на изображения и т. д.

1 голос
/ 19 октября 2011

Просто ограничьте доступ в файле web.config для этого UserUploadsFolder:

<location path="UserUploads">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...