ValidateInput và AllowHTML được kết nối trực tiếp với XSS vấn đề an ninh.
Vì vậy, trước tiên chúng ta hãy cố gắng hiểu XSS.
XSS (cross-site scripting) là một cuộc tấn công bảo mật nơi kẻ tấn công tiêm mã độc khi thực hiện nhập dữ liệu. Bây giờ tin tốt là XSS được mặc định ngăn chặn trong MVC. Vì vậy, nếu bất kỳ ai cố gắng đăng mã JavaScript hoặc HTML, anh ta sẽ gặp phải lỗi dưới đây.
Nhưng trong thời gian thực có kịch bản mà HTML đã được cho phép, như biên tập HTML. Vì vậy, đối với những loại kịch bản bạn có thể trang trí hành động của mình với thuộc tính bên dưới.
[ValidateInput(false)]
public ActionResult PostProduct(Product obj)
{
return View(obj);
}
Nhưng chờ đã, có sự cố ở đây. Vấn đề là chúng tôi đã cho phép HTML trên hành động hoàn chỉnh có thể nguy hiểm. Vì vậy, nếu chúng ta có thể kiểm soát chi tiết hơn về cấp độ trường hoặc thuộc tính thực sự sẽ tạo ra một giải pháp gọn gàng, gọn gàng và chuyên nghiệp.
Đó là nơi AllowHTML hữu ích. Bạn có thể thấy trong đoạn mã dưới đây tôi đã trang trí “AllowHTML” trên cấp thuộc tính của lớp sản phẩm.
public class Product
{
public string ProductName { get; set; }
[AllowHtml]
public string ProductDescription { get; set; }
}
Vì vậy, tóm tắt "ValidateInput" cho phép tập lệnh và HTML được đăng ở cấp độ hành động trong khi "AllowHTML" ở cấp độ chi tiết hơn.
Tôi khuyên bạn nên sử dụng "AllowHTML" nhiều hơn cho đến khi bạn rất chắc chắn rằng toàn bộ hành động cần phải khỏa thân.
Tôi khuyên bạn nên đọc bài đăng trên blog Preventing XSS Attacks in ASP.NET MVC using ValidateInput and AllowHTML minh họa từng bước về tầm quan trọng của hai thuộc tính này với một ví dụ.
Nguồn
2015-05-29 06:09:32
rất vui được gặp bạn ở đây thưa bạn. Rất nhiều bài đăng của bạn hữu ích cho tôi trong dự án mã. –
Trong ví dụ của bạn, nếu người dùng nhập html vào trường 'ProductName', lỗi sẽ vẫn được hiển thị (như mong đợi). Có cách nào để trình bày thông báo lỗi thân thiện với người dùng hơn không. Lỗi này dường như bỏ qua cấu hình Lỗi tùy chỉnh. – philreed