Допустим, у вас есть общедоступное приложение ASP.NET (или классический ASP) в IIS со сценарием / страницей, которые должны записывать или обновлять файлы в определенной папке, которая находится в дереве папок веб-публикации.
1) Как правильно это настроить?
Меня больше всего беспокоит то, что я хочу разрешить приложениям ASP / ASP.NET писать в папку, но я не хочу, чтобы обычные пользователи http могли помещать в нее файлы.
Прежде всего позвольте мне начать с того, что я довольно сильно верю, что почти всегда есть лучшее решение, чем запись на диск. Будь то запись данных в базу данных или загрузка веб-служб, запись на диск должна быть последним вариантом.
При этом есть несколько веских причин, но это довольно сложно и зависит от того, почему приложение должно записывать файлы.
Наличие данных, написанных за пределами того места, откуда выполняется код, является абсолютным требованием. Разрешение конечным пользователям писать по пути, по которому движки ASPX / asp могут интерпретировать / выполнять код, является плохим по очевидным причинам.
На это влияют и другие факторы:
Папка App_Data
Чтобы повысить безопасность данных, используемых вашим приложением ASP.NET, для приложений ASP.NET была добавлена новая подпапка с именем App_Data. Файлы, хранящиеся в папке App_Data, не возвращаются в ответ на прямые HTTP-запросы, что делает папку App_Data рекомендуемым местом для данных, хранящихся в вашем приложении, включая .mdf (SQL Server Express Edition), .mdb (Microsoft Access) или XML. файлы. Обратите внимание, что при использовании папки App_Data для хранения данных вашего приложения удостоверение вашего приложения имеет разрешения на чтение и запись в папку App_Data.
App_Data по умолчанию доступен для записи, но не для чтения. Сервер, кажется, сопротивляется любой попытке изменить это. Таким образом, лучше создать совершенно новую папку и изменить права доступа к ней на НЕ ВЫПОЛНЯЕМЫЕ, ЧТЕНИЕ и ЗАПИСЬ.
Наверное, держу пари, чтобы посмотреть на stackoverflow.com...
Лучше всего поместить эту папку ВНЕ корня вашего документа и позволить вашему приложению читать из файловой системы. В противном случае сделайте папку доступной только для чтения, за исключением пользователей ASP [.NET], и управляйте правами записи с помощью внутренних разрешений вашего приложения.