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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

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