Как разрешить загрузку доступа к определенной папке только в App_Data asp.net mvc

89
6

У меня это в моем web.config:


<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>

Я думаю, что я ошибаюсь, но я не могу найти правильный путь к Google. Я хочу предоставить доступ для загрузки только в эту папку "UserFiles". Мне нужно сделать это через web.config, так как живая среда будет на Azure, поэтому у меня не будет машины для RDP, чтобы изменить это IIS.

спросил(а) 2014-02-11T00:18:00+04:00 6 лет, 7 месяцев назад
1
Решение
120

Во-первых, если вы используете веб-роль Azure, а не Azure Websites, вы должны хранить этот материал в блобе. Во-вторых, необходимо ли защищать эти файлы, чтобы доступ к ним мог получить только аутентифицированный пользователь (или даже пользователи могут получать доступ только к своим собственным файлам?).


Предположим, что любой может загрузить любой файл с сервера. Если это так, создайте каталог под названием UserFiles под контентом. Теперь вы можете просто ссылаться на эти файлы, например:


<a href="@Url.Content("~\Content\UserFiles\filename.ext")">MY File title</a>

Теперь, если они защищены по схеме аутентификации, все становится сложным. Вы не хотите, чтобы кто-либо мог загружать эти предметы. Итак, давайте сделаем несколько шагов, чтобы защитить их.


1. Создайте папку под названием UserFiles на верхнем уровне вашего решения.


2.В вашем web.config позвольте сделать это там, где никто не может получить к нему доступ.

 <system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>

3.Создайте контроллер MVC, позвоните в его файлы, которые вы фактически будете использовать для доставки файлов пользователю. Здесь давайте сделаем действие, называемое загрузкой, которое принимает идентификатор файла (при условии, что вы храните информацию о файлах в базе данных)


public FileResult Download(int id){
//perform logic to see if user has access to this file
//if access, return the file
//else return a 404
}

Теперь ваша ссылка на скачивание файла будет выглядеть как


@Html.ActionLink("My File Title", "Download", "Files", new{id = Model.Id})

MVC, и ваш код будет иметь доступ к папке UserData, в то время как пользователь внешней сети этого не сделает. Используйте контроллер/действие, чтобы закрыть свой контент.

ответил(а) 2014-02-11T01:09:00+04:00 6 лет, 7 месяцев назад
98

Файлы в App_Data не будут предоставляться конечному пользователю по дизайну.


App_Data используется для хранения файлов данных. Из MSDN:


App_Data содержит файлы данных приложения, включая файлы базы данных .mdf, XML файлы и другие файлы хранилища данных. Папка App_Data используется ASP.NET для хранения локальной базы данных приложения.

Содержимое папок приложений... не поддерживается в ответ на веб-запросы, но к нему можно получить доступ из кода приложения.


Было бы неплохо, если бы люди могли загружать файлы, такие как ваша база данных, из App_Data.


Вам нужно переместить папку UserFiles вне App_Data.

ответил(а) 2014-02-11T01:01:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема