Tôi đã làm việc trên một ứng dụng asp.net đã trải qua một cuộc kiểm toán bảo mật của một công ty bảo mật hàng đầu và tôi đã học được mẹo đơn giản này để ngăn chặn một lỗ hổng bảo mật ít được biết đến nhưng quan trọng.
Giải thích dưới đây là từ:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guiances_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_C gặp_One-Click_Attacks
Cân nhắc sử dụng Page.ViewStateUserKey để chống lại các cuộc tấn công bằng một cú nhấp chuột. Nếu bạn xác thực người gọi và sử dụng ViewState, hãy đặt thuộc tính Page.ViewStateUserKey trong trình xử lý sự kiện Page_Init để ngăn chặn các cuộc tấn công bằng một cú nhấp chuột.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Đặt thuộc tính thành giá trị bạn biết là duy nhất cho mỗi người dùng, chẳng hạn như ID phiên, tên người dùng hoặc số nhận dạng người dùng.
Tấn công bằng một cú nhấp chuột xảy ra khi kẻ tấn công tạo một trang Web (.htm hoặc .aspx) có chứa trường biểu mẫu ẩn có tên __VIEWSTATE đã được điền với dữ liệu ViewState. ViewState có thể được tạo từ một trang mà kẻ tấn công đã tạo trước đó, chẳng hạn như trang giỏ hàng với 100 mục. Kẻ tấn công dụ người dùng không nghi ngờ vào trình duyệt trang và sau đó kẻ tấn công khiến trang được gửi đến máy chủ nơi ViewState hợp lệ. Máy chủ không có cách nào để biết rằng ViewState có nguồn gốc từ kẻ tấn công. Xác thực ViewState và HMAC không chống lại cuộc tấn công này vì ViewState hợp lệ và trang được thực thi trong bối cảnh bảo mật của người dùng.
Bằng cách đặt thuộc tính ViewStateUserKey, khi kẻ tấn công duyệt đến một trang để tạo ViewState, thuộc tính được khởi tạo thành tên của anh ta hoặc cô ta. Khi người dùng hợp pháp gửi trang đến máy chủ, nó được khởi tạo với tên của kẻ tấn công. Kết quả là, kiểm tra ViewState HMAC không thành công và một ngoại lệ được tạo ra.