Строки подключения. Этот ответ объясняет, как читать строки подключения из app.config, где они не будут зашифрованы.

сматривал несколько примеров шифрования connectionStrings (Web.config) в приложении ASP.NET MVC (.NET 4.0), и кажется, что есть два основных способа добиться этого (пример 1 и связанныепример 2):

Используйте инструмент aspnet_regiis.

Основная проблема с использованием aspnet_regiis заключается в том, что я могу запустить инструмент локально (на моем компьютере разработчика), но веб-сайт на самом деле размещен на Arvixe и, как и на любом другом веб-хосте: нет способа выполнять команды на сервере. Насколько я понимаю, если я зашифрую строки соединения Web.config на своем компьютере и опубликую файл Web.config, их невозможно будет расшифровать на сервере (исправьте, если это не так).

Примечание: я использовал толькоRSAProtectedConfigurationProvider, но я предполагаю, чтоDataProtectionConfigurationProvider будет иметь ту же проблему, так как это зависит от пользователя / машины.

Программно зашифруйте строку подключения.

Программное шифрование connectionStrings также имеет недостаток: каждый раз, когда я публикую свой веб-сайт, обновляется Web.config (с незашифрованными connectionStrings), и это означает, что в течение некоторого периода времени Web.config не будет зашифрован. Даже если я гарантирую, что файл Web.config публикуется только при наличии изменений в нем, проблема может быть сведена к минимуму, но не уменьшена.

Я подумал, что использование статического класса может помочь сократить время, в котором строки соединений не шифруются. К сожалению, для шифрования connectionStrings требуется путь к приложению, и кажется, что единственный способ получить путь к приложению - это запрос (Request.ApplicationPath) и в статическом классе (очевидно) нет запроса.

private void ProtectSection(string sectionName,
                                   string provider)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
                 config.GetSection(sectionName);

    if (section != null &&
              !section.SectionInformation.IsProtected)
    {
        section.SectionInformation.ProtectSection(provider);
        config.Save();
    }
}

private void UnProtectSection(string sectionName)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
              config.GetSection(sectionName);

    if (section != null &&
          section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
        config.Save();
    }
}

UnProtectSection("appSettings");

ProtectSection("appSettings",
    "DataProtectionConfigurationProvider");

Как правильно зашифровать connectionString и устранить / уменьшить количество времени, в течение которого раздел Web.config не шифруется? Вы пишете какую-то обертку вокругOpenWebConfiguration метод, который проверяет, если раздел зашифрован и использовать только эту оболочку? Пользователи могут получить доступЛюбые страница на вашем веб-сайте, так как же вы задерживаете шифрование, пока они не запросят некоторые данные из базы данных, или вы проверяете, зашифровано ли оно при первой возможности?

Ответы на вопрос(1)

Ваш ответ на вопрос