Tôi đang làm việc để cải thiện tính bảo mật của trang web của công ty và muốn tạo một mã thông báo để ngăn chặn những nỗ lực giả mạo có thể dễ dàng duy trì đây là những gì tôi nghĩ ra.Tạo một AntiForgeryToken thông qua Dependency Injection
public class AntiForgeryToken
{
private readonly string _referenceToken;
public AntiForgeryToken()
{
_referenceToken = Guid.NewGuid().ToString();
}
public string ReferenceToken
{
get { return _referenceToken; }
}
}
Trong lớp cơ sở của tôi cho MasterPage của tôi, tôi đã một HiddenField được bao bọc bởi sở hữu tên: ReferenceToken
protected virtual void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
InjectToken();
}
ValidateToken();
}
private void InjectToken()
{
var token = ObjectFactory.GetInstance<AntiForgeryToken>();
ReferenceToken = token.ReferenceToken;
}
private void ValidateToken()
{
var token = ObjectFactory.GetInstance<AntiForgeryToken>();
if (ReferenceToken.Equals(token.ReferenceToken, SC.InvariantCultureIgnoreCase))
return;
...do stuff for failed token
}
Tôi có StructureMap xử lý lưu trữ các dấu hiệu bên trong phiên vì vậy nó vẫn kiên trì mỗi phiên sử dụng, sẽ tất cả của việc này là một thực hiện hợp lệ của một chương trình AntiForgery?
Edit: Dường như có một số nhầm lẫn về câu hỏi của tôi, vâng tôi hiểu ASP.NET MVC đã tích hợp sẵn trong chương trình AntiForgeryToken, câu hỏi này là một cách rõ ràng về cách thức để tái tạo này cho WebForms để ngăn chặn việc sử dụng một cuộc tấn công CSRF (Cross Site Request Forgery). Tôi hiểu điều này không có nghĩa là loại bỏ sự cần thiết cho sự cho phép thích hợp của quyền người dùng.
Tôi sẽ hiển thị liên kết rất lớn @Neal và @solairaja đã đăng: Prevent Cross-Site Request Forgery (CSRF) using ASP.NET MVC’s AntiForgeryToken() helper. Bài viết này giải thích thêm về những gì mà cuộc tấn công CSRF là và cách MVC dừng nó, tuy nhiên giải pháp của họ không thể áp dụng cho các biểu mẫu web, đó là lý do tại sao tôi đã thực hiện riêng của mình.
Sau khi nhìn thấy phản hồi từ @Neal, tôi nghĩ rằng rất có thể đó là câu trả lời được chấp nhận vì tôi không nhận ra rằng tôi có thể lấy mã nguồn thực sự từ công cụ MVC. Nhưng tôi sẽ để lại câu hỏi mở bất cứ ai khác có một số thông tin có giá trị để thêm vào.
Tôi muốn sử dụng các thẻ MVC trong một trang WebForms - ví dụ: bài từ WebForm để MVC và vẫn xác nhận. Xem câu trả lời này: http://stackoverflow.com/questions/1347728/using-an-mvc-htmlhelper-from-a-webform/2553583#2553583 – Keith