Вопрос по asp.net-mvc – Защита папок в MVC

5

В папке «Содержимое» есть несколько файлов, которые я не хочу, чтобы пользователь мог загружать без авторизации. Как предотвратить доступ пользователя к файлу, введя ... Content / {имя_файла} в адресную строку?

Ваш Ответ

3   ответа
3

Есть несколько возможностей. Первый состоит в использовании<location> тег в вашем web.config:

<location path="Content">
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</location>

Другая возможность - поместить эти файлы в папку, к которой никто не может получить доступ (например, к папке App_Data), а затем выполнить действие контроллера, которое будет обслуживать те файлы, которые будут украшены[Authorize] приписывать.

Да, я сделал ошибку. Ты прав:<deny users="?" /> должен быть использован. Я обновил ответ.
Внутри<configuration> элемент и снаружи<system.web>, Это в корне.
Хорошо, спасибо, не сразу все заработало, как и должно быть "deny users = & quot;?" / & GT; не разрешать пользователям = & quot;? & quot; / & GT; :) user517406
Где это будет находиться в web.config? user517406
1

это не работает для меня.

<configuration>
    <appSettings>
    ...
    </appSettings>
    <system.web>
    ...
    </system.web>
    <system.webServer>
    ...
    </system.webServer>
    <location path="Content">
        <system.web>
            <authorization>
                <deny users="?" />
            </authorization>
        </system.web>
    </location>
</configuration>

Я запускаю приложение MVC 4.0, вход и выход из системы, не могу получить доступ к любой странице приложения, но все равно могу получить доступ к файлу по прямой ссылке, например:

http://localhost:80966/Content/Files/home.jpg
0

Ну, один из способов это сделать вне контекста IIS, поэтому вместоC:\inetpub\wwwroot

изменить это на что-то вродеC:\temp\files.

в вашей БД есть GUID, связанный с именем документа, и используйте GUID для отображения ссылки на файл.

в вашем действии контроллера вы просто примете GUID, получите имя файла и затем предоставите файл в своем ответе.

Похожие вопросы