Одно из правил "хорошего тона" при созданий приложений с претензией на безопасность и защищенность от взлома - нигде не писать логины и пароли. Особенно пароли к локальным БД в которых, как правило, живут очень-важные-секретные-данные (а вот скажите честно, вы всегда руководствуетесь принципом минимально возможных прав доступа, или честно под sa соединяетесь? ;)
Так вот, в ASP.NET начиная с версии 2.0 существует очень простая возможность прозрачного шифрования строк соединения. Прежде всего вам необходимо предоставить пользователю, под которым работает IIS, доступ к хранилищу ключей RSA:
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"
А после этого, для того, чтобы зашифровать содержимое секции достаточно сделать очень простую вещь:
public void EncryptConnString() { Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.GetSection("connectionStrings"); if (!section.SectionInformation.IsProtected) { section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider"); config.Save(); } }
И что самое главное, зашифровав секцию таким образом вы все равно сможете ей пользоваться совершенно прозрачно, как будто она и не зашифрована. Единственный минус, работа с зашифрованным секциями несколько медленнее.
string connString = WebConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
public void DecryptConnString() { Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.GetSection("connectionStrings"); if (section.SectionInformation.IsProtected) { section.SectionInformation.UnprotectSection(); config.Save(); } }
То же самое можно сделать и из командной строки, что, зачастую, удобнее:
//шифруем aspnet_regiis.exe -pef "connectionStrings" "C:\Inetpub\wwwroot\YourWebSite" –prov "RSAProtectedConfigurationProvider"
//расшифровываем aspnet_regiis.exe -pdf "connectionStrings" "C:\Inetpub\wwwroot\YourWebSite"
И не забывайте, что данные по умолчанию шифруются с помощью Machine Level Key, так что, зашифровав секцию на одной машине, на другой уже не расшифруешь.
Комментариев нет:
Отправить комментарий