• 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

Điều hành viên: vietluyen

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

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

Gửi bàigửi bởi neverland87 » CN 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:

Mã: Chọn hết

  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:

Mã: Chọn hết

  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:


Mã: Chọn hết

  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:

Mã: Chọn hết

  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:

Mã: Chọn hết

  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ã:

Mã: Chọn hết

  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:

Mã: Chọn hết

  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:

Mã: Chọn hết

  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:

Mã: Chọn hết

  1. confStrSect.SectionInformation.UnprotectSection()
Sửa lần cuối bởi neverland87 vào ngày CN 16/08/2009 2:03 pm với 1 lần sửa.


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

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 948
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

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

Gửi bàigửi bởi NoBi » CN 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
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

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

Gửi bàigửi bởi neverland87 » CN 16/08/2009 2:03 pm

NoBi đã viết: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
Bài viết: 4
Ngày tham gia: T.Năm 04/02/2010 3:56 pm

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

Gửi bàigửi bởi chieuhado » T.Tư 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
Bài viết: 195
Ngày tham gia: CN 30/03/2008 8:46 pm
Been thanked: 18 time

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

Gửi bàigửi bởi Lam Tieu Tuong » T.Bảy 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
Bài viết: 2
Ngày tham gia: T.Sáu 29/07/2011 10:13 pm

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

Gửi bàigửi bởi domhienxl » T.Ba 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).


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

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách