Bảo mật ASP.NET

Bảo mật vốn là chủ đề cực kỳ phức tạp và bảo mật trong ASP.NET cũng

không phải ngoại lệ. Các lập trình viên .NET chắc hẳn cũng đã quen

thuộc với những khó khăn gặp phải khi tìm kiếm tài liệu tiếng Việt trong

lĩnh vực này. Hôm nay, Quản Trị Mạng xin giới thiệu nôi dung chương 9,

chương về Bảo mật ASP.NET trong cuốn “ASP.NET in a Nutshell” của

hai tác giả Andrew Duthie và Matthew MacDonald, nhà xuất bản

O’Reilly.

Trong chương này, chúng ta sẽ đề cập đến một số phương thức giúp đảm bảo

an toàn cho các ứng dụng ASP.NET. Để nhấn mạnh vào nội dung trọng tâm

của chương, chúng ta sẽ không bàn về bảo mật mạng, bảo mật máy chủ và

bảo mật cơ sở hạ tầng ASP.NET. Nói như thế không có nghĩa là các chủ đề

đó không quan trọng. Ngược lại, nếu không cấu hình hỗ trợ bảo mật phù hợp

cho máy chủ và cơ sở hạ tầng mạng, những gì cố gắng thực hiện để đảm bảo

an toàn cho ứng dụng ASP.NET thông qua các công cụ .NET Framework

cung cấp sẽ trở nên vô ích. Tuy nhiên, nằm trong phạm vi giới hạn của một

chương nên chúng ta chỉ đi sâu vào vấn đề bảo mật các chương trình ứng

dụng ASP.NET.

pdf43 trang | Chuyên mục: ASP.NET | Chia sẻ: dkS00TYs | Lượt xem: 2738 | Lượt tải: 4download
Tóm tắt nội dung Bảo mật ASP.NET, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
, ngoại trừ một điểm là 
có thêm một ô textbox (để kiểm chứng mật khẩu) và ba điều khiển kiểm tra 
tính hợp lệ: 
 Một điều khiển CompareValidator để xác định xem giá trị trong ô 
Password và PasswordConfirm có khớp với nhau hay không. 
 Một điều khiển RequiredFieldValidator để xác nhận người dùng đã 
nhập địa chỉ e-mail, vì thế chúng ta không có giá trị e-mail null trong 
file XML. 
 Một điều khiển RequiredFieldValidator để đảm bảo rằng người dùng đã 
nhập mật khẩu để không có giá trị mật khẩu null trong file XML. 
Nếu muốn đảm bảo thêm cho e-mail nhập vào là hợp lệ, chúng ta có thể sử 
dụng hàm RegularExpressionValidator. 
Trong trình điều khiển sự kiện Register_Click, đầu tiên nó sẽ kiểm tra để đảm 
bảo trang web là hợp lệ nhằm giúp vi xử lý tránh phải lãng phí thời gian làm 
việc với dữ liệu không hợp lệ. Nếu trình duyệt của người dùng hỗ trợ 
DHTML, trang web thậm chí sẽ không được đưa lên cho đến khi các yêu cầu 
của điều khiển hợp lệ được đáp ứng. 
Nếu trang web hợp lệ, một biến DataSet cục bộ sẽ được khai báo và được cấp 
phát không gian bộ nhớ trên file Users.xml. Sau đó là kiểm tra xem địa chỉ e-
mail người dùng nhập vào có tồn tại trên file không. Nếu không, thuộc tính 
Text của điều khiển Label ASP.NET sẽ được dùng để yêu cầu người dùng 
nhập một địa chỉ e-mail khác. 
Nếu e-mail đó không tồn tại, một DataRow mới sẽ được tạo, chứa địa chỉ e-
mail đã chọn của người dùng cùng với bản băm của mật khẩu, thêm hàng mới 
vào dataset và ghi dataset trở lại file XML (như ví dụ bên dưới). Kỹ thuật này 
không kiểm soát trùng hợp, vì thế nếu ai đó thay đổi nội dung của file XML 
trong khi nó đang được đọc hoặc ghi dữ liệu vào thì các thay đổi sẽ bị ghi đè. 
Dim NewUser As DataRow 
NewUser = LoginDS.Tables(0).NewRow( ) 
NewUser("Email") = Email.Text 
NewUser("Password") = _ 
 FormsAuthentication.HashPasswordForStoringInConfigFile( _ 
 Password.Text, "SHA1") 
LoginDS.Tables(0).Rows.Add(NewUser) 
LoginDS.WriteXml(Server.MapPath("Users.xml")) 
Chú ý: Để ghi file Users.xml thành công, tài khoản bên dưới bộ thực thi 
ASP.NET đang chạy phải truy cập được vào file. 
Sau khi ghi thông tin của người dùng mới vào Users.xml, chúng ta sẽ đưa 
người dùng tới trang mô tả trong tham số xâu truy vấn: 
Response.Redirect(Request.QueryString("Page")) 
9.1.2.2. Thoát (Log-out) 
Nhiều khi chúng ta phải làm việc với thông tin nhạy cảm trong ứng dụng từ 
các máy công cộng. Trong những trường hợp như vậy, chúng ta cần cung cấp 
cho người dùng một số cách log-out nhằm ngăn người khác truy cập thông tin 
riêng tư hoặc truy cập tài nguyên ứng dụng thông qua tài khoản của họ. 
Trong thẩm định Forms điều này khá đơn giản. Chúng ta có thể gọi phương 
thức tĩnh SignOut của lớp FormsAuthentication như ở ví dụ 9-4. Khi đó 
người dùng sẽ được chuyển đến file Logout.aspx để hoàn chỉnh quá trình log-
out. Chúng ta cũng có thể tạo một điều khiển người dùng chứa một nút mà 
khi kích vào nó sẽ gọi ra phương thức SignOut và thêm điều khiển người 
dùng cho tất cả các trang được bảo vệ của ứng dụng. 
Ví dụ 9-4. Logout.aspx 
Logout Page 
 Sub Page_Load(Sender As Object, e As EventArgs) 
 FormsAuthentication.SignOut( ) 
 Message.Text = "You have been logged out." 
 End Sub 
Ví dụ 9-5 thể hiện nội dung của file Users.xml. 
Ví dụ 9-5. Users.xml 
 andrew@aspnetian.com 
816010E041FA485C6E2383C649343D3A0CAD4D25</Passwo
rd> 
9.1.3. Thẩm định Passport 
Thẩm định Passport cho phép một người dùng có một mật khẩu duy nhất 
trong khi có thể đăng nhập (địa chỉ e-mail được gắn với tài khoản Passport 
của họ) vào nhiều ứng dụng hay website. Điều này giúp đơn giản quá trình 
đăng nhập của người dùng và giảm bớt công việc quản trị khi bảo trì tài 
khoản người dùng. 
Để sử dụng được thẩm định Passport trong ASP.NET chúng ta phải 
download và cài đặt Passport SDK. 
Sau khi cài đặt Passport SDK, chúng ta cần cấu hình theo cấu trúc tương ứng. 
Cuối cùng là cấu hình ứng dụng ASP.NET để sử dụng thẩm định Passport, 
như đoạn mã bên dưới: 
 <!-- 
 Other configuration elements 
 --> 
Phần tử và thuộc tính redirectUrl là tuỳ ý và được dùng để mô tả 
một URL nôi bộ để chuyển hướng nếu người dùng đưa ra yêu cầu đăng nhập 
không sử dụng tài khoản các Passport của họ. Nếu được bỏ qua, 
người dùng đăng nhập không sử dụng tài khoản Passport sẽ được chuyển tới 
trang đăng nhập trên một server login Passport. 
9.2. Cấp phép (Authorization) 
Cấp phép là quá trình xác định xem liệu người dùng đã được nhận dạng trong 
quá trình thẩm định có được phép truy cập tài nguyên họ đang yêu cầu không 
hay phải thực hiện thêm hành động nào khác (ví dụ như update dữ liệu cho 
cơ sở dữ liệu rồi mới được truy cập). Quá trình thẩm định trả lời cho câu hỏi: 
“Bạn là ai?”, còn quá trình cấp phép trả lời cho câu hỏi: “Bạn có được phép 
làm điều đó hay không?”. 
Cấp phép trong ASP.NET có ba hình thức: cấp phép sử dụng Danh sách điều 
khiển truy cập (ACL), cấp phép sử dụng đưòng dẫn URL và cấp phép 
programmatic. 
9.2.1. Cấp phép ACL 
Danh sách điều khiển truy cập (ACL) được dùng trong Windows NT, 
Windows 2000, Windows XP và Windows Sever 2003 để kiểm soát truy cập 
tài nguyên hệ thống như các tệp, thư mục trong hệ thống file NTFS. Bạn có 
thể gán một số tài nguyên nhất định vào ACL cho tài khoản người dùng hoặc 
một nhóm người dùng Windows để cho phép họ truy cập tài nguyên hoặc xác 
định kiểu truy cập (đọc, ghi, thay đổi…) được phép dùng. 
Thẩm định ACL chủ yếu được dùng với thẩm định Windows trong 
ASP.NET. IIS sử dụng nhân dạng người dùng đã qua thẩm định để thực hiện 
các kiểm tra ACL và cũng có thể đưa ra các yêu cầu về tài nguyên được bảo 
vệ bởi ACL. bằng cách dùng ngữ cảnh bảo mật của người dùng, nếu 
impersonation được cho phép. 
Để bảo vệ một file dùng ACL, kích phải chuột lên file trong Windows 
Explorer và chọn Properties. Tiếp theo, bấm chọn thẻ Security để xem người 
dùng, nhóm người dùng và đặc quyền hiện thời có trên file. Sử dụng các nút 
Add và Remove để thêm hoặc bớt tài khoản người dùng, nhóm người dùng 
và đánh dấu hoặc bỏ dấu ở các ô trong phần Permissions để thay đổi đặc 
quyền cho người dùng. 
(Trong Windows XP, thẻ Security có thể không xuất hiện trên hộp thoại 
Properties của file hay folder nếu chức năng Simple File Sharing được bật. 
Để xem liệu thành phần này có đang được bật hay không, vào Tools > 
Folder Options trong Windows Explorer. Sau đó chọn thẻ View, vào phần 
Advanced Settings, bỏ dấu chọn trong ô "Use simple file sharing 
(recommended)" đi là được). 
Một trong những việc cần làm đầu tiên trong là loại bỏ nhóm Everyone ra 
khỏi thư mục, do nhóm này cho phép bất kỳ ai truy cập máy tính cũng có thể 
truy cập file này. 
Khi loại bỏ một số tài khoản đặc biệt (như SYSTEM) khỏi các danh sách ACL 
chúng ta cần thận trọng. Một số file hệ điều hành đòi hỏi phải có tài khoản 
SYSTEM mới được phép truy cập để thực hiện các chức năng của hệ điều 
hành. Vì thế loại bỏ những đặc quyền này có thể là nguyên nhân gây ra nhiều 
vấn đề nghiêm trọng. thậm chí dẫn đến không khởi động được hệ điều hành. 
9.2.2. Cấp phép URL 
Chế độ cấp phép URL sử dụng các yếu tố và của phần tử 
cấu hình để kiểm soát truy cập file, thư mục bên trong ứng 
dụng, giống như trong ví dụ ở thẩm định Forms. Truy cập có thể được cho 
phép hoặc bị từ chối dựa trên tên người dùng (username), vai trò (role) và 
phương thức HTTP dùng để yêu cầu tài nguyên. Do đó, lấy ví dụ, nếu cho 
phép người dùng Marcie truy cập tất cả tài nguyên trong ứng dụng theo tất cả 
phương thức yêu cầu của HTTP, nhưng cấm người dùng Charles thực hiện 
yêu cầu POST, chúng ta sẽ phải thêm phần vào sau file 
web.config ở mức gốc của ứng dụng (hoặc có thể thêm phần 
vào file web.config trong một thư mục con để ghi đè hoặc 
thêm các thiết lập): 
Như trên hình 9-1, chúng ta có thể dùng thẻ với thuộc tính path 
cho điều khiển truy cập của một file hay folder cụ thể: 
Do thẻ trong file web.config đòi hỏi cặp thẻ riêng 
của nó nên thẻ luôn xuất hiện bên trong các thẻ 
và nhưng bên ngoài các thẻ và 
. Chúng ta có thể định nghĩa ít hay nhiều thẻ khác 
nhau tuỳ ý. Mỗi thể có thể chứa những giới hạn cấp phép URL riêng. 
Để mô tả miền thay cho các tài khoản hay nhóm cục bộ, chúng ta có thể sử 
dụng định dạng domainname\ userorgroupname khi mô tả tên trong 
và . Có hai ký tự đặc biệt: “*” cho phép tất cả người dùng, 
“?” là chỉ những người dùng nặc danh (không qua thẩm định). Cuối cùng, có 
thể mô tả nhiều người dùng hoặc nhóm người dùng cùng một lúc trong 
và bằng dấu phẩy. 
9.2.3 Cấp phép Programmatic (programmatic authorization) 
Chúng ta có thể thực hiện các kiểm tra programmatic tại thời gian chạy bằng 
cách xác định xem liệu người dùng có được phép thực hiện một hành động 
nào đó hay không. Công cụ chủ yếu để thực hiện điều này là phương thức 
IsInRole, được định nghĩa bởi giao diện IPrincipalvà có thể truy cập từ thuộc 
tính User của lớp Page. Cũng như với cấp phép ACL, phương thức này hữu 
ích nhất khi dùng với cơ chế thẩm định Windows và khi muốn kiểm tra xem 
liệu liệu người dùng đã qua thẩm định thuộc nhóm Windows nào, như nhóm 
manager (quản lý) chẳng hạn. Chúng ta có thể lấy ví dụ minh hoạ cho việc sử 
dụng IsInRole như bên dưới: 
If Page.User.IsInRole("Managers") Then 
 'perform some action restricted to managers 
Else 
 Message.Text = "You must be a manager to perform this action" 
End If 
Bạn đọc thân mến, có thể thấy rõ bảo mật ứng dụng trong ASP.NET tập trung 
làm rõ hai vấn đề thẩm định (authentication) và cấp phép (authorization). 
Song ngoài hai khái niệm chính này chúng ta cũng cần biết đến một số yếu tố 
đáng quan tâm khác mà có dịp chúng tôi sẽ tiếp tục chuyển tới các bạn vào 
một ngày gần nhất. Hy vọng các bạn đã có được một tài liệu tham khảo hữu 
ích từ phần bài dịch này của tác giả. Trong quá trình dịch không thể tránh 
khỏi một số sai sót, mong các bạn góp ý để giúp tác giả sửa chữa nhằm phục 
vụ bạn đọc một tác phẩm hay hơn và chính xác hơn. 

File đính kèm:

  • pdfBảo mật ASP.NET.pdf
Tài liệu liên quan