Các giải pháp lập trình CSharp- P26 doc

10 317 0
Các giải pháp lập trình CSharp- P26 doc

Đang tải... (xem toàn văn)

Thông tin tài liệu

251 Chương 7: ASP.NET và Web Form private void cmdUpload_Click(object sender, System.EventArgs e) { if (FileInput.PostedFile.FileName == "") { // Không file nào được chỉ định. lblInfo.Text = "No file specified."; } else { try { if (FileInput.PostedFile.ContentLength > 1048576) { // Cấm các file lớn hơn 1 megabyte. lblInfo.Text = "File is too large."; }else { // File được lưu vẫn giữ lại tên file gốc của nó. string fileName = Path.GetFileName(FileInput.PostedFile.FileName); // Tiến trình ASP.NET phải có quyền đối với // vị trí nó thực hiện lưu file, nếu không // ngoại lệ "access denied" sẽ xảy ra. FileInput.PostedFile.SaveAs(fileName); lblInfo.Text = "File " + fileName + " uploaded."; } }catch (Exception err) { lblInfo.Text = err.Message; } } } } 252 Chương 7: ASP.NET và Web Form Hình 7.4 Trang thử nghiệm upload file Bạn có thể kiểm tra các thuộc tính của file được chỉ định (bao gồm kích thước của nó) trước khi lưu để ngăn kiểu tấn công từ chối dịch vụ (lừa ứng dụng ASP.NET để upload các file lớn làm đầy đĩa cứng). Tuy nhiên, đoạn mã này không ngăn người dùng submit file ngay từ đầu, điều này vẫn có thể làm chậm server và được sử dụng để mở một kiểu tấn công từ chối dịch vụ khác—nắm lấy tất cả các tiểu trình thợ ASP.NET đang rảnh. Để ngăn chặn kiểu tấn công này, bạn hãy sử dụng thẻ <httpruntime> trong file Web.config để chỉ định kích thước tối đa của file (tính theo kilobyte): <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <httpRuntime maxRequestLength="4096" /> <! Bỏ qua các thiết lập khác. > </system.web> </configuration> Nếu bạn không chỉ định kích thước tối đa, giá trị mặc định 4096 (4 megabyte) sẽ áp dụng. Nếu người dùng cung cấp một file quá lớn, một ngoại lệ sẽ phát sinh ngay khi trang được post-back.  Có một cách khác để gửi file từ client lên web-server là sử dụng dịch vụ Web XML ASP.NET . Bạn cần phát triển một ứng dụng dựa-trên- Windows cho phép người dùng chọn một file và rồi giao tiếp với một dịch vụ Web XML để chuyển giao thông tin. 253 Chương 7: ASP.NET và Web Form 8. 8. S d ng IIS authenticationử ụ S d ng IIS authenticationử ụ   Bạn cần ngăn người dùng truy xuất các trang nào đó trừ khi họ đã được xác thực dựa vào Windows user account (tài khoản người dùng Windows ) trên server.   Sử dụng IIS Windows authentication . Chọn phương pháp xác thực mà bạn thích, và từ chối truy xuất nặc danh đến thư mục ảo bằng IIS Manager . Bạn có thể lấy thông tin về người dùng đã được xác thực từ thuộc tính Page.User hoặc lớp HttpContext . IIS và ASP.NET sử dụng mô hình bảo mật được sắp lớp (layered security model). Khi người dùng yêu cầu một trang ASP.NET trên HTTP, các bước dưới đây sẽ diễn ra: 1. IIS thực hiện việc xác thực người dùng. Nếu Anonymous access được kích hoạt, IIS sẽ tự động đăng nhập người dùng với tài khoản nặc danh (IUSR_[ServerName]). Nếu không, nó sẽ yêu cầu thông tin xác thực để đăng nhập người dùng với một tài khoản Windows khác. 2. Nếu IIS xác thực người dùng thành công, nó sẽ chuyển yêu cầu đến ASP.NET cùng với thông tin về người dùng đã được xác thực. Theo đó, ASP.NET có thể sử dụng các dịch vụ bảo mật của nó dựa vào các thiết lập trong file Web.config (ví dụ, không cho người dùng hoặc nhóm cụ thể truy xuất đến các trang hoặc thư mục nào đó). Ngoài ra, mã của bạn có thể hạn chế các hành động bằng cách kiểm tra thông tin về người dùng. 3. Nếu mã ASP.NET truy xuất bất kỳ tài nguyên hệ thống nào (ví dụ, mở một file hoặc kết nối đến một cơ sở dữ liệu), hệ điều hành Windows sẽ thực hiện những kiểm tra bảo mật của nó. Thông thường, mã ứng dụng ASP.NET không thực sự chạy dưới tài khoản của người dùng đã được xác thực. Như thế, những kiểm tra bảo mật này được thực hiện dựa trên tài khoản tiến trình ASPNET (được cấu hình bằng file machine.config). Để sử dụng IIS authentication, bước đầu tiên là vô hiệu Anonymous access cho thư mục ảo. Bạn cần khởi động IIS Manager (vào Start | Control Panel | Administrative Tools | Internet Information Services). Kế tiếp, nhắp phải vào một thư mục ảo hoặc một thư mục con bên trong thư mục ảo, và chọn Properties. Chọn thẻ Directory Security (xem hình 7.5). 254 Chương 7: ASP.NET và Web Form Hình 7.5 Directory Security Kế tiếp, nhắp nút Edit. Cửa sổ như hình 7.6 sẽ xuất hiện. Trong nửa dưới của cửa sổ, bạn có thể kích hoạt một trong các phương pháp xác thực. Tuy nhiên, không phương pháp nào được sử dụng trừ khi bạn xóa dấu chọn Anonymous access. Hình 7.6 Directory authentication Bạn có thể kích hoạt nhiều phương pháp xác thực, trong trường hợp này client sẽ sử dụng phương pháp được hỗ trợ mạnh nhất. Nếu Anonymous access được kích hoạt thì nó luôn được sử dụng. Các phương pháp xác thực khác nhau được mô tả trong bảng 7.2. Bảng 7.2 Các kiểu xác thực 255 Chương 7: ASP.NET và Web Form Chế độ Mô tả Anonymous Client không cần cung cấp bất kỳ thông tin nào. Người dùng được đăng nhập bằng tài khoản nặc danh có sẵn (IUSR_[ServerName]). Basic Basic authentication là một phần của chuẩn HTTP 1.0, và nó được hầu hết các trình duyệt và web-server hỗ trợ. Khi sử dụng Basic authentication, trình duyệt yêu cầu người dùng nhập username và password. Thông tin này được chuyển cho IIS, và nó được so trùng với Windows user account cục bộ. Basic authentication nên luôn được phối hợp với SSL vì nó không bảo mật thông tin đăng nhập trước khi chuyển giao. Digest Digest authentication gửi một digest (tức mã băm mật mã) trên mạng. Do đó, nó an toàn hơn Basic authentication vì thông tin đăng nhập nếu bị chặn cũng không thể dùng lại được. Bất lợi chủ yếu là Digest authentication chỉ được hỗ trợ trên Internet Explorer 5.0 trở lên. Cũng vậy, web-server của bạn cần sử dụng Active Directory hoặc có thể truy xuất đến một Active Directory server. Integrated Khi sử dụng Integrated authentication thì Internet Explorer gửi logon token cho người dùng hiện hành một cách tự động, miễn là nó ở trên một miền đáng tin cậy. Integrated authentication chỉ được hỗ trợ trên Internet Explorer 2.0 trở lên và không thể làm việc trên các proxy-server. Một khi đã kích hoạt các thiết lập bảo mật cho thư mục ảo thích hợp, bạn cũng nên bảo đảm file Web.config được thiết lập là sử dụng Windows authentication. Trong một dự án Visual Studio .NET, đây là thiết lập mặc định. <configuration> <system.web> <! Bỏ qua các thiết lập khác. > <authentication mode="Windows" /> </system.web> </configuration> Vào lúc này, thư mục ảo của bạn sẽ yêu cầu xác thực người dùng và ứng dụng Web sẽ có thể lấy thông tin về người dùng. Ngoài ra, bạn có thể thêm các quy tắc phân quyền (authorization rule) để ngăn người dùng hoặc nhóm nào đó truy xuất các trang web hoặc thư mục con. Bạn thực hiện điều này bằng cách thêm thẻ <allow> và <deny> vào phần <authorization> của file Web.config. Ví dụ, bạn có thể tạo một thư mục con với nội dung file Web.config như sau: <configuration> <system.web> <authorization> <deny roles="Guest,Associate" /> <allow users="nnbphuong81" /> <deny users="*" /> 256 Chương 7: ASP.NET và Web Form </authorization> </system.web> </configuration> ASP.NET xét qua các quy tắc phân quyền theo thứ tự chúng xuất hiện và dừng khi tìm thấy một trùng khớp. Trong ví dụ này, người dùng trong các nhóm Guest hoặc Associate sẽ tự động bị từ chối. Người dùng nnbphuong81 sẽ được phép (trừ khi anh ta là thành viên của một trong hai nhóm bị cấm ở trên). Tất cả các người dùng khác sẽ bị từ chối. Trong trường hợp này, đây là các nhóm và tài khoản người dùng cục bộ. Nếu muốn nói đến một tài khoản miền, bạn hãy sử dụng cú pháp [DomainName]\[UserName] . Để ý trong ví dụ này, file Web.config không chứa phần <authentication> . Đó là vì phần này đã được cấu hình trong file Web.config thuộc thư mục ứng dụng Web. Các thư mục con có thể thiết lập các quy tắc phân quyền của chúng, nhưng chúng không thể thay đổi chế độ xác thực. Một tùy chọn khác không cho truy xuất đến các trang cụ thể là sử dụng đặc tính <location> : <configuration> <system.web> <! Bỏ qua các thiết lập khác. > </system.web> <location path="SecurePage.aspx"> <system.web> <authorization> <deny roles="Guest" /> </authorization> </system.web> </location> </configuration> Cuối cùng, bạn có thể viết logic xác thực bằng cách kiểm tra identity của người dùng trong phần mã trang web (sử dụng thuộc tính Page.User , thuộc tính này cung cấp đối tượng WindowsPrincipal ). Bạn có thể lấy tên người dùng từ thuộc tính WindowsPrincipal.Identity.Name , và bạn có thể kiểm tra vai trò thành viên trong nhóm bằng phương thức WindowsPrincipal.IsInRole . Phần mã cho trang web dưới đây sẽ trình bày các kỹ thuật này: using System; using System.Web; using System.Web.UI.WebControls; 257 Chương 7: ASP.NET và Web Form using System.Web.Security.Principal; public class WindowsSecurityTest : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblMessage; // (Bỏ qua phần mã designer.) private void Page_Load(object sender, System.EventArgs e) { // Thu lấy identity đã được IIS xác thực. WindowsIdentity identity = (WindowsIdentity)User.Identity; // Kiểm tra xem nó có phải là một Administrator hay không. bool isAdmin = User.IsInRole(@"BUILTIN\Administrators"); // Hiển thị một vài thông tin về identity. lblMessage.Text = "You have reached the secured page, " + User.Identity.Name + "." + "<br><br>Authentication Type: " + identity.AuthenticationType.ToString() + "<br>Anonymous: " + identity.IsAnonymous.ToString() + "<br>Authenticated: " + identity.IsAuthenticated.ToString() + "<br>Guest: " + identity.IsGuest.ToString() + "<br>System: " + identity.IsSystem.ToString() + "<br>Administrator: " + isAdmin.ToString(); } } 9. 9. S d ng Forms authenticationử ụ S d ng Forms authenticationử ụ   Bạn cần ngăn người dùng truy xuất các trang nào đó trừ khi họ tự xác thực trước với một trang đăng nhập tùy biến.   Hiện thực Forms authentication bằng cách cấu hình thẻ <authentication> trong file Web.config của ứng dụng. Bạn phải tạo trang đăng nhập, nhưng ASP.NET sẽ giữ lại trạng thái xác thực của người dùng. Forms authentication là một mô hình bảo mật linh hoạt, cho phép ngăn người dùng chưa được xác thực truy xuất vào trang nào đó. Bạn cần viết mã để thực hiện xác thực, và ASP.NET cấp 258 Chương 7: ASP.NET và Web Form một cookie cho người dùng đã được xác thực. Người dùng không có cookie sẽ bị chuyển hướng sang trang đăng nhập khi truy xuất một trang được bảo vệ. Để hiện thực Forms authentication, bạn phải thực hiện các bước sau đây: • Cấu hình Forms authentication bằng thẻ <authentication> trong file Web.config của ứng dụng. • Sử dụng các thiết lập trong file Web.config để hạn chế người dùng nặc danh truy xuất vào một trang hoặc thư mục cụ thể. • Tạo trang đăng nhập, và thêm logic xác thực của bạn vào (sử dụng lớp FormsAuthentication thuộc không gian tên System.Web.Security ). Bước đầu tiên là cấu hình file Web.config trong thư mục gốc của ứng dụng để kích hoạt Forms authentication, như được trình bày trong đoạn mã dưới đây. Bạn cũng cần chỉ định trang đăng nhập tùy biến (người dùng chưa được xác thực sẽ bị chuyển hướng sang trang này) và thời gian trễ (sau thời gian này, cookie sẽ bị loại bỏ). Authentication cookie tự động được làm mới với mỗi yêu cầu web. <configuration> <system.web> <! Bỏ qua các thiết lập khác. > <authentication mode="Forms"> <forms loginUrl="login.aspx" timeout="30" /> </authentication> </system.web> </configuration> Kế đến, bạn cần thêm quy tắc phân quyền để từ chối người dùng nặc danh. Cách dễ nhất để bảo toàn các trang là tạo một thư mục con cùng với file Web.config của nó. File Web.config này sẽ từ chối việc truy xuất của các người dùng nặc danh, như được trình bày dưới đây: <configuration> <system.web> <authorization> <deny users="?" /> </authorization> <! Bỏ qua các thiết lập khác. > </system.web> </configuration> 259 Chương 7: ASP.NET và Web Form Bây giờ, ASP.NET sẽ tự động gửi các yêu cầu chưa được xác thực (đối với các trang trong thư mục con) đến trang đăng nhập tùy biến. Một tùy chọn khác không cho truy xuất đến các trang cụ thể trong thư mục hiện thời là sử dụng thẻ <location> : <configuration> <system.web> <! Bỏ qua các thiết lập khác. > </system.web> <location path="SecurePage.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> </configuration> Bạn cũng có thể từ chối các người dùng cụ thể bằng cách nhập danh sách tên người dùng (phân cách bằng dấu phẩy) thay vào ký tự “ ? ” (“ ? ” nghĩa là “tất cả các người dùng nặc danh”). Kế tiếp, bạn cần tạo trang đăng nhập. Trang đăng nhập có thể xác thực người dùng bằng password được viết cứng (phù hợp cho các thử nghiệm đơn giản), cơ sở dữ liệu phía server, hoặc bất kỳ kiểu logic xác thực tùy biến nào. Một khi người dùng đã được xác thực thành công, bạn cần gọi phương thức tĩnh FormsAuthentication.RedirectFromLoginPage . Phương thức này sẽ thiết lập authentication cookie và chuyển hướng người dùng đến trang được yêu cầu lúc đầu. Dưới đây là trang đăng nhập sơ bộ, chỉ kiểm tra một password cụ thể khi người dùng nhắp vào nút Login: using System; using System.Web; using System.Web.UI.WebControls; using System.Web.Security; public class LoginPage : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblStatus; protected System.Web.UI.WebControls.Button cmdLogin; protected System.Web.UI.WebControls.TextBox txtPassword; protected System.Web.UI.WebControls.TextBox txtName; 260 Chương 7: ASP.NET và Web Form // (Bỏ qua phần mã designer.) private void cmdLogin_Click(object sender, System.EventArgs e){ if (txtPassword.Text.ToLower() == "secret") { FormsAuthentication.RedirectFromLoginPage( txtName.Text, false); }else { lblStatus.Text = "Try again."; } } } Để thử nghiệm trang đăng nhập trên, bạn hãy yêu cầu trang SecurePage.aspx (nằm trong thư mục Secured). Bạn sẽ bị chuyển hướng sang trang login.aspx, và nếu nhập đúng password, bạn sẽ được trả về trang SecurePage.aspx. Hình 7.7 Trang đăng nhập tùy biến 10. 10. Th c hi n xác nh n tính h p l có-ch n-l aự ệ ậ ợ ệ ọ ự Th c hi n xác nh n tính h p l có-ch n-l aự ệ ậ ợ ệ ọ ự   Bạn cần sử dụng các điều kiểm validator của ASP.NET . Tuy nhiên, bạn muốn kiểm tra bằng mã lệnh để có thể xác nhận tính hợp lệ chỉ các điều kiểm hay tập các điều kiểm nào đó, hoặc có thể tùy biến các thông báo lỗi dựa trên đầu vào không hợp lệ.   Vô hiệu thuộc tính EnableClientScript của mọi điều kiểm validator để trang có thể được post-back. Kế đó, sử dụng phương thức Page.Validate để xác nhận tính . Theo đó, ASP.NET có thể sử dụng các dịch vụ bảo mật của nó dựa vào các thiết lập trong file Web.config (ví dụ, không cho người dùng hoặc nhóm cụ thể truy xuất đến các trang hoặc thư mục nào đó) trong các phương pháp xác thực. Tuy nhiên, không phương pháp nào được sử dụng trừ khi bạn xóa dấu chọn Anonymous access. Hình 7.6 Directory authentication Bạn có thể kích hoạt nhiều phương pháp. sử dụng phương pháp được hỗ trợ mạnh nhất. Nếu Anonymous access được kích hoạt thì nó luôn được sử dụng. Các phương pháp xác thực khác nhau được mô tả trong bảng 7.2. Bảng 7.2 Các kiểu xác thực 255 Chương

Ngày đăng: 08/07/2014, 17:20

Mục lục

  • CẤU TRÚC CỦA SÁCH

  • YÊU CẦU VỀ HỆ THỐNG

  • CÁCH SỬ DỤNG ĐĨA CD

  • Chương 1:PHÁT TRIỂN ỨNG DỤNG

    • 1. Tạo ứng dụng Console

    • 2. Tạo ứng dụng dựa-trên-Windows

    • 3. Tạo và sử dụng module

    • 4. Tạo và sử dụng thư viện

    • 5. Truy xuất các đối số dòng lệnh

    • 6. Chọn biên dịch một khối mã vào file thực thi

    • 8. Tạo và quản lý cặp khóa tên mạnh

    • 9. Tạo tên mạnh cho assembly

    • 10. Xác minh một assembly tên mạnh không bị sửa đổi

    • 11. Hoãn việc ký assembly

    • 12. Ký assembly với chữ ký số Authenticode

    • 13. Tạo và thiết lập tin tưởng một SPC thử nghiệm

    • 14. Quản lý Global Assembly Cache

    • 15. Ngăn người khác dịch ngược mã nguồn của bạn

    • Chương 2:THAO TÁC DỮ LIỆU

      • 1. Thao tác chuỗi một cách hiệu quả

      • 2. Mã hóa chuỗi bằng các kiểu mã hóa ký tự

      • 3. Chuyển các kiểu giá trị cơ bản thành mảng kiểu byte

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan