Szyfrowanie connection string w VB.NET

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.