• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[ASP.NET]Mã hóa và giải mã section trong tập tin web.config

Các bài viết giới thiệu và hướng dẫn dành cho lập trình Web Forms

Moderator: vietluyen

neverland87
Guru
Guru
Posts: 490
Joined: Sat 26/05/2007 4:31 pm
Been thanked: 8 times

[ASP.NET]Mã hóa và giải mã section trong tập tin web.config

Postby neverland87 » Sun 21/09/2008 6:27 pm

Tên bài viết: Mã hóa và giải mã section trong tập tin web.config
Tác giả: neverland87
Cấp độ bài viết: Vừa
Tóm tắt:


Trong lập trình web thì việc bảo mật thông tin luôn giữ một vai trò quan trọng. Khi làm việc với web asp.net 2.0 thì bạn phải thao tác với tập tin cấu hình web.config của nó. Đây là nơi chứa đựng những thông tin nhạy cảm. Và với vai trò là 1 nhà quản trị web, bạn phải tìm cách mã hóa (và tất nhiên là phải giải mã được) những đoạn (sections) trong tập tin này. Trong bài viết này, mình sẽ hướng dẫn bạn mã hóa phân đoạn <connectionStrings></connectionStrings>.

Bước 1: Tạo mới hoặc mở ứng dụng web asp.net (nếu đã có).
Bước 2: Tạo tập tin web.config (nếu chưa có)
Bước 3: Mở tập tin web.config, và thêm vào phân đoạn connectionStrings như sau:

Code: Select all

  1. <configuration>
  2.       <appSettings>
  3.             <add key="var1" value="SomeValue"/>
  4.       </appSettings>
  5.       <connectionStrings>
  6.  <add name="MyConnString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True;" />
  7.  </connectionStrings>
  8.       <system.web>...
  9. </configuration>



Bước 4: Thêm vào trang web của bạn 2 button control: btnEncrypt và btnDecrypt. Mục đích: khi nhấn vào btnEncrypt thì sẽ mã hóa thông tin trong phân đoạn <connectionStrings> và btnDecrypt sẽ có nhiệm vụ giải mã thông tin đã được mã hóa.

Bước 5: Vào vùng soạn thảo code (nhấn F7), khai báo 2 biến toàn cục sau:

Code: Select all

  1. Private provider As String = "RSAProtectedConfigurationProvider"
  2. Private section As String = "connectionStrings"


Sau đó: Imports System.Web.Configuration

Bước 6: Thụ lý tình huống Click cho btnEncrypt:


Code: Select all

  1. Protected Sub btnEncrypt_Click(ByVal sender As Object, ByVal e As EventArgs)
  2. Try
  3.       Dim confg As Configuration = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
  4.       Dim confStrSect As ConfigurationSection = confg.GetSection(section)
  5.       If Not confStrSect Is Nothing Then
  6.             confStrSect.SectionInformation.ProtectSection(provider)
  7.             confg.Save()
  8.       End If
  9.       Response.Write("Configuration Section " & "<b>" & WebConfigurationManager.ConnectionStrings("MyConnString").ConnectionString & "</b>" & " is automatically decrypted")
  10. Catch ex As Exception
  11.  
  12. End Try
  13. End Sub

Bước 7: Thụ lý tình huống Click của btnDecrypt:

Code: Select all

  1. Protected Sub btnDecrypt_Click(ByVal sender As Object, ByVal e As EventArgs)
  2. Try
  3.       Dim confg As Configuration = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
  4.       Dim confStrSect As ConfigurationSection = confg.GetSection(section)
  5.       If Not confStrSect Is Nothing AndAlso confStrSect.SectionInformation.IsProtected Then
  6.             confStrSect.SectionInformation.UnprotectSection()
  7.             confg.Save()
  8.       End If
  9.  
  10. Catch ex As Exception
  11.  
  12. End Try
  13. End Sub

Bước 8: Chảy thử web (F5), nhấn vào btnEncrypt, sau đó tắt cửa sổ ứng dụng web của bạn.
Do ứng dụng web được chạy tại hệ thống cục bộ, nên lúc này sẽ có 1 hộp thoại hiện ra cho biết tập tin web.config đã bị thay đổi nội dung, nó hỏi bạn có lưu hay không, bạn cứ chọn “Yes to All” là được.

Bây giờ bạn thử mở tập tin web.config lên, bạn sẽ thấy sự thay đổi rõ ràng ở phân đoạn connectionStrings:

Code: Select all

  1. <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
  2.   <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
  3.    xmlns="http://www.w3.org/2001/04/xmlenc#">
  4.    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
  5.    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
  6.     <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
  7.      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
  8.      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
  9.       <KeyName>Rsa Key</KeyName>
  10.      </KeyInfo>
  11.      <CipherData>
  12.       <CipherValue>CHuj8aWLgxN8oj1PfAREoZFoepWpnJoxVzejZuHiOiJcCm6xp9vJ2O9QthW6yaRcG+8l6GWc1gj9+h4qvgjMhsvUgCTBGhp8109rT5ZFCbPJ+cJY9p78zAFTS7luW3pFdTj2/PzL3/TDrs2jDAw9OvA0KAHxTtJVJgZZAiWxqvg=</CipherValue>
  13.      </CipherData>
  14.     </EncryptedKey>
  15.    </KeyInfo>
  16.    <CipherData>
  17.     <CipherValue>Z+7AOlW/Xvk8vf6l+haaJytnUXfs8dFw1Lrpc9ovqrszJR1KsIL1zF1JW93CGy3UIHzQho/3DQhBJCgQpZXZs/pOyzUWe9wTX4SAOOZS2gsACHeZrDSYlaV1olJQC8Xjlq20FsomirRoL2jPGV2ypmMvR8yo+fx0Gpy43Qo8SRsN9K+oWbQsbicKo1btNCUAhYr4XMhlbonmMh2PjbjkDOxOumicuCaYiCXzvgzrj/k=</CipherValue>
  18.    </CipherData>
  19.   </EncryptedData>
  20.  </connectionStrings>

Bước 9: Nhấn F5 lần nữa để chạy web. Bây giờ nhấn vào btnDecrypt để giải mã. Cuối cùng bạn có nội dung đã được giải mã:

Code: Select all

  1. <connectionStrings>
  2.   <add name="MyConnString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True;" />
  3.  </connectionStrings>


Trong đoạn code trên, bạn mở tập tin web.config bằng phương thức OpenWebConfiguration của đối tượng System.Configuration.Configuration. Sau đó chúng ta sử dụng phương thức GetSection của đối tượng Configuration vừa tạo để trỏ đến phân đoạn trong web.config, ở đây là connectionStrings.
Bước kế, ta tiến hành mã hóa phân đoạn vừa được trỏ tới qua đoạn code:

Code: Select all

  1. confStrSect.SectionInformation.ProtectSection(provider)

Cuối cùng tiến hành lưu lại những thay đổi trên tập tin web.config:

Code: Select all

  1. confg.Save()


Quá trình giải mã cũng tương tự như vậy, giải mã thông qua đoạn code sau:

Code: Select all

  1. confStrSect.SectionInformation.UnprotectSection()
Last edited by neverland87 on Sun 16/08/2009 2:03 pm, edited 1 time in total.


SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

User avatar
NoBi
Quản trị
Quản trị
Posts: 959
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: [ASP.NET]Mã hóa và giải mã section trong tập tin web.config

Postby NoBi » Sun 16/08/2009 12:29 pm

Phải Imports System.Web.Configuration thì nó mới hiểu thằng WebConfigurationManager (ở trên hướng dẫn Imports System.Configuration là sai).
:>

neverland87
Guru
Guru
Posts: 490
Joined: Sat 26/05/2007 4:31 pm
Been thanked: 8 times

Re: [ASP.NET]Mã hóa và giải mã section trong tập tin web.config

Postby neverland87 » Sun 16/08/2009 2:03 pm

NoBi wrote:Phải Imports System.Web.Configuration thì nó mới hiểu thằng WebConfigurationManager (ở trên hướng dẫn Imports System.Configuration là sai).

Cám ơn anh đã phát hiện chỗ sai trong bài. Em đã sửa lại cho đúng :)
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

chieuhado
Posts: 4
Joined: Thu 04/02/2010 3:56 pm

Cách bảo mật dữ liệu

Postby chieuhado » Wed 10/02/2010 11:02 am

Bạn ơi cho mình hỏi nếu muốn người ta không lấy được dữ liệu từ website của mình thì phải làm sao ạ ????
Có phải mình viết code để mã hóa dữ liệu ( hay còn gọi là bảo mật dữ liệu ) không ????
Có phải đoạn code trên cũng giúp mình bảo mật dữ liệu không nhỉ ????????? :-/
ai biết làm ơn chỉ giúp mình đi :((
_________________________________________________
tuyen dung|viec lam|tim viec

Lam Tieu Tuong
Thành viên tích cực
Thành viên tích cực
Posts: 195
Joined: Sun 30/03/2008 8:46 pm
Been thanked: 18 times

Re: [ASP.NET]Mã hóa và giải mã section trong tập tin web.config

Postby Lam Tieu Tuong » Sat 13/02/2010 7:18 am

Để người ta không lấy được dữ liệu của bạn thì cách nhanh nhất là đừng làm website nữa :D.
Hehe đùa vậy thôi chứ yêu cầu của bạn không có rõ ràng. Người ta ở đây là ai, ai lấy được, ai không được lấy. Dữ liệu ở đây là những gì, dữ liệu dạng nào muốn bảo mật.

domhienxl
Posts: 2
Joined: Fri 29/07/2011 10:13 pm

Re: [ASP.NET]Mã hóa và giải mã section trong tập tin web.con

Postby domhienxl » Tue 18/10/2011 10:35 am

bạn ơi cho mình hỏi?
có cách nào tạo một block ghi nhận lại thời gian đăng nhập và các thay đổi của user đối với cơ sở dữ liệu.
Điều này giúp cho người quản trị biết user nào đã đăng nhập vào hệ thống và chỉnh sửa thông tin gì trong cơ sở dữ liệu ( trường hợp có nhiều admin tham gia chỉnh sữa cơ sở dữ liệu).


Return to “[ASP.NET] Bài viết giới thiệu, hướng dẫn”

Who is online

Users browsing this forum: No registered users and 0 guests