vb.net безопасность структуры соединения сущности соединения - PullRequest
1 голос
/ 03 сентября 2011

Я понимаю возможности шифрования строки подключения в .net v4. У меня есть приложение для создания выигрышных форм, которое будет использоваться несколькими людьми на разных машинах. Я понимаю, что мне нужно защитить строку подключения во время первого запуска приложения на целевой машине. Однако я обеспокоен тем, что в течение некоторого времени моя строка подключения будет незашифрованной. Я ищу совет о том, как развернуть мое приложение с уже зашифрованной или зашифрованной строкой подключения во время установки.

Как кто-нибудь еще может шифровать строку соединения безопасным способом?

Любая помощь очень ценится.

1 Ответ

1 голос
/ 03 сентября 2011

Вы можете получить свой раздел конфигурации connectionString и изменить его , например:

oSection = oConfiguration.GetSection("connectionStrings") as System.Configuration.ConnectionStringsSection;

if (oSection != null)
{
    if ((!(oSection.ElementInformation.IsLocked)) && (!(oSection.SectionInformation.IsLocked)))
    {
        if (protect)
        {
            if (!(oSection.SectionInformation.IsProtected))
            {
                blnChanged = true;

                // Encrypt the section.
                oSection.SectionInformation.ProtectSection
                            (strProvider);
            }
        }
        else
        {
            if (oSection.SectionInformation.IsProtected)
            {
                blnChanged = true;

                // Remove encryption.
                oSection.SectionInformation.UnprotectSection();
            }
        }
    }

    if (blnChanged)
    {
        // Indicates whether the associated configuration section 
        // will be saved even if it has not been modified.
        oSection.SectionInformation.ForceSave = true;

        // Save the current configuration.
        oConfiguration.Save();
    }
}

Пример в VB.NET :

Public Sub ProtectSection()
    ' Get the current configuration file.
    Dim config As Configuration = ConfigurationManager.OpenExeConfiguration
                    (ConfigurationUserLevel.None)
    Dim protectedSection As ConfigurationSection = config.GetSection(m_Section)

    ' Encrypts when possible
    If ((protectedSection IsNot Nothing) _
    AndAlso (Not protectedSection.IsReadOnly) _
    AndAlso (Not protectedSection.SectionInformation.IsProtected) _
    AndAlso (Not protectedSection.SectionInformation.IsLocked) _
    AndAlso (protectedSection.SectionInformation.IsDeclared)) Then
        ' Protect (encrypt)the section.
        protectedSection.SectionInformation.ProtectSection(Nothing)
        ' Save the encrypted section.
        protectedSection.SectionInformation.ForceSave = True
        config.Save(ConfigurationSaveMode.Full)
    End If
End Sub

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...