Bezpečnosti ve webových aplikacích není nikdy dost. Pro její posílení je však možné učinit pár kroků. V ASP.NET lze například zašifrovat přihlašovací řetězce k databázi.
Možnosti jsou dvě. První z nich je šifrování programové, pomocí metody ProtectSection. Mně se však více líbí utilita aspnet_regiis.exe. Není třeba psát další kód, její použití je jednoduché a dá se využít v instalačních průvodcích. Jak tedy na to?

Hlavní předpoklad pro úspěšné zašifrování je ten, že projekt běží pod IIS. Při vytváření virtuálního adresáře pro daný projekt jsme vyplnili název aplikace. S tím teď budeme pracovat.

Vlastnosti aplikace v IIS

Zmíněná utilita aspnet_regiis.exe se nachází na systémovém disku v adresáři WINDOWS\Microsoft.NET\Framework\, kde dále zvolíme adresář podle verze frameworku. V mém případě je celá cesta C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727. Utilita má množství různých parametrů, ze kterých budeme potřebovat tyto tři:

  • pe "sekce" - zašifruje zadanou sekci v konfiguračním souboru
  • pd "sekce" - dešifruje zadanou sekci
  • app "/nazev" - udává název aplikace v IIS pro kterou se de/šifrování provede

Na ukázku zašifruji connectionString WebSite uložené pod názvem 'sifrovaniConnectionStringu', která má v IIS jako název aplikce uveden 'pokus'.

Před zašifrováním vypadá sekce connectionStrings v souboru web.config takto:

ASP:
<connectionStrings>
    <add name="pokusConnectionString" connectionString="Data Source=VIOLET;Initial Catalog=pokus;User ID=pokusUser;Password=abcd" providerName="System.Data.SqlClient" />
</connectionStrings>

Po provedení příkazu:

CODE:
aspnet_regiis.exe -pe "connectionStrings" -app "/pokus"

Šifrování connectionStringu

vypadá sekce connectionStrings takto:

CODE:
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
        <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
            xmlns="http://www.w3.org/2001/04/xmlenc#">
            <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
            <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                        <KeyName>Rsa Key</KeyName>
                    </KeyInfo>
                    <CipherData>
                        <CipherValue>IhM6wvyhcpsvCyPfbUn9nykbYv9Tg5PqZqerH2m6xqP4SEWHDFZRcqi2Go/wLGx/nbIPz2JTgHJGEzoDFT41xxDGtefRQB+6DUuS6P/T1fyuWFWGnu5XpcT5WPMprw/bZJji+9YGsz6l0Uu+6vxafPyJArXM0ngBwiR8SfqU9XU=</CipherValue>
                    </CipherData>
                </EncryptedKey>
            </KeyInfo>
            <CipherData>       
<CipherValue>drd8bAYTji4xOd2BC+pkt4+zMItwUPIsdMwIodtWFd7r8yDpxv7uQoBLwWs3B8KgpUTivPELPLz6hXFcL1C8EgP6j/AiBQSERgvNwOsjb/F9Cl777FsZ9SepHCEH8cnD4IHASL0kwCk09mrfPMYTBnn6djmlZlfs8ogdbD24EtbPlO2M+TK6IeYdTi+s9ZGeMLi8r0p1cFXmTnHPBaEe5Iwgtjg5kS7nNo1mA82PUyeWufFuepzahPmiIGNmkJqrZrKGd8q2GYfyRAv7909QTLIATzyDbpm/bQvde7Rc/2k=</CipherValue>
            </CipherData>
        </EncryptedData>
</connectionStrings>

Po spuštění příkazu:

CODE:
aspnet_regiis.exe -pd "connectionStrings" -app "/pokus"

Dešifrování connectionStringu

je connectionString opět plně čitelný.