W końcu udało mi się szyfrowanie ConnectionString w asp.net. W sumie nie wiem czy zadziała na 100%, ale szyfrowanie ConnectionString udało mi się w testowej wersji strony. VB.net tylko i wyłącznie bawiłem się więc – nie gwarantuję, że kod jest poprawny.
UWAGA! Ten post został zamieszczony na mojej starej stronie, która dawno temu padła. Archiwizuje stare artykuły których nie zweryfikowałem, może kiedyś się przydadzą – proszę z rezerwą podchodzić do treści tu zwartych.
Problem polega na tym, że uruchamiam witrynę na localhost. Dopiero jak uda mi się zainstalować stronę na zewnętrznym serwerze, będę mógł z czystym sumieniem powiedzieć, że wszystko działa. Obawiam się, że szyfrowanie może zostać nieodgadnione na innych komputerach ponieważ klucz szyfrowania może być przechowywany na komputerze lokalnym?
Aby zrobić szyfrowanie korzystałem z informacji zawartych na tych stronach:
Dzięki temu testowemu kodowi:
- Dodamy Connection String do pliku Web.config
- Dodamy kod szyfrowania Connection String
- Zaszyfrujemy Connection String
- Połączymy się z lokalną bazą danych MySQL
- Pobierzemy dane z bazy danych MySQL i wypełnimy GridView
W swoich testach, dodałem przycisk na stronie za którego pomocą szyfrowałem ConnectionString, albo go deszyfrowałem.
Najpierw trzeba zmodyfikować plik Web.config znajdujący się w naszym projekcie. Do kodu dodajemy następującą zawartość pomiędzy <configuration> a </configuration>:
Dodawanie Connection String do pliku Web.config:
<connectionStrings> <add name="MySql" connectionString="Data Source=Localhost; Database=tornado; Uid=User; Pwd=Pass;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
Nadajemy nazwę naszego connectionString. Ja nadałem MySql, ponieważ to z bazą danych MySQL ma łączyć się witryna. Musimy podać również providerName, oczywiście w moim przypadku to MySql.Data.MySqlClient wzięte z Imports MySql.Data.MySqlClient.
Kod przycisku szyfrowania (proszę zabijcie mnie, ale tego nie jestem pewien – prostu nie pamiętam):
Imports System.Configuration Imports System.Web.Configuration Shared Sub ToggleWebEncrypt() ' Open the Web.config file. Dim config As Configuration = WebConfigurationManager. _ OpenWebConfiguration("~") ' Get the connectionStrings section. Dim section As ConnectionStringsSection = DirectCast( _ config.GetSection("connectionStrings"), _ ConnectionStringsSection) ' Toggle encryption. If section.SectionInformation.IsProtected Then section.SectionInformation.UnprotectSection() Else section.SectionInformation.ProtectSection( _ "DataProtectionConfigurationProvider") End If ' Save changes to the Web.config file. config.Save() End Sub
Wygląd pliku Web.config po zaszyfrowaniu:
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl……………</CipherValue> </CipherData> </EncryptedData> </connectionStrings>
Test połączenia z lokalną bazą danych MySQL i wypełnienie GridView:
Imports MySql.Data.MySqlClient Imports System.Data Imports System.Configuration Imports System.Web.Configuration Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim dt As New DataTable ' Open the Web.config file. Dim config As Configuration = WebConfigurationManager. _ OpenWebConfiguration("~") ' Get the connectionStrings section. Dim section As ConnectionStringsSection = DirectCast( _ config.GetSection("connectionStrings"), _ ConnectionStringsSection) ' Toggle encryption. If section.SectionInformation.IsProtected Then section.SectionInformation.UnprotectSection() Dim conn As MySqlConnection = New MySqlConnection() ' kod wzięty z neta, niestety nie pamiętam strony conn.ConnectionString = ConfigurationManager.ConnectionStrings("MySql").ConnectionString Try conn.Open() Dim adapter As MySqlDataAdapter = New MySqlDataAdapter("SELECT * FROM tornadolokacje", conn) adapter.Fill(dt) GridView1.DataSource = dt GridView1.DataBind() Catch ex As Exception MsgBox(ex.Message) End Try Else MsgBox("Nie udało się odszyfrować Conneection String") End If End Sub