У меня машина Windows Server 2008 R2 с IIS7.5. Этот веб-сервер размещает многие веб-сайты в разных доменах, и на каждом веб-сайте есть несколько приложений asp.net. Поддержка и развитие доступа к этой машине довольно ограничены из-за требований заказчика. Я хочу использовать библиотеку Microsoft.Web.Administration для запроса конфигурации каждого из этих приложений в ASMX веб-метод:Как безопасно прочитать корневую конфигурационную папку asp.net?
[WebMethod(MessageName = "GetDatabases")]
public List<Connection> GetDatabases()
{
List<Connection> connections = new List<Connection>();
ServerManager sm = new ServerManager();
foreach (Site site in sm.Sites)
{
foreach (Application app in site.Applications)
{
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(app.Path);
foreach (ConnectionStringSettings cs in config.ConnectionStrings.ConnectionStrings)
{
try
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(cs.ConnectionString);
connections.Add(new Connection { Site = site.Name, Path = app.Path, Name = cs.Name, InitialCatalog = builder.InitialCatalog, DataSource = builder.DataSource });
}
catch
{
connections.Add(new Connection { Site = site.Name, Path = app.Path, Name = cs.Name});
}
}
}
}
return connections;
}
Этот код работает отлично в Visual Studio, но после развертывания на сервере возникает ошибка:
Server was unable to process request. ---> Filename: redirection.config
Error: Cannot read configuration file due to insufficient permissions
Я исследовал, как обойти эту проблему и нашел эту страницу:
http://www.iis.net/learn/manage/configuring-security/application-pool-identities
Так я CR добавили новый пул приложений только для этого веб-сервиса и настроили идентификатор пула приложений, чтобы иметь доступ только для чтения к папке, содержащей redirection.config (C: \ Windows \ System32 \ inetsrv \ config), используя ACL из папки. (Я сделал это для папки, а не для файла, так как кажется, что требуется больше одного файла в папке.)
Поэтому мой вопрос: до тех пор, пока я ограничиваю доступ к веб-сервису должным образом, есть ли какая-либо безопасность последствия с этим? Мне кажется, что это нормально, но последствия создания конфигурации этих сайтов-клиентов могут быть ограничены карьерой, если не сказать больше!
Спасибо, Owen
EDIT: Просто интересно, если я сформулировать этот вопрос правильно? До сих пор никто не принимал удар, чтобы ответить на него, поэтому это редактирование в основном для того, чтобы поднять его;)
_Если ваше требование - разрешить поддержку, чтобы видеть соединения, которые используют ваши разные сайты, то я не вижу проблемы с созданием такого сервиса в общем принципе, если вы будете осторожны. Благодарю г-на Феникса. Я планировал использовать все ваши предложения и соглашаюсь с тем, что в целом принцип должен быть в порядке. Однако при рассмотрении мы решили использовать этот код для локального вывода информации в текстовый файл. Это неплохая идея, но не стоит ничего рисковать. –
Это имеет смысл. Лучше не рисковать шансом, что кто-то сможет обойти ваши ограничения. Рад помочь. –