Một số thuộc tính mô hình của tôi được đánh dấu bằng thuộc tính AllowHtml. Có cách nào để tự động áp dụng bảo vệ AntiXss (i. E. Chỉ lọc các thẻ được cho phép) vào các trường này không?Tính năng bảo vệ AntiXss Các thuộc tính mô hình Html
Trả lời
Không có cách tự động. Việc gần nhất bạn có thể làm là để có được gói AntiXss Nuget. Sau đó, bạn có thể sử dụng nó như dưới đây trong điều khiển của bạn:
Microsoft.Security.Application.Sanitizer.GetSafeHtml("YourHtml");
HOẶC
Microsoft.Security.Application.Encoder.HtmlEncode("YourHtml");
Nếu bạn sử dụng, bạn có thể giải mã nó bằng cách sử
Server.HtmlDecode("HtmlEncodedString");
Hope this helps.
Trước tiên, không có gì được tích hợp sẵn cho điều đó. Nhưng MVC cho phép để làm những việc như vậy một cách dễ dàng thông qua ModelBinders tùy chỉnh, bạn có thể xác định bạn
public class CustomAntiXssAttribute : Attribute { }
và trang trí tài sản của bạn với nó (và thậm chí kế thừa từ AllowHtmlAttribute
nếu bạn muốn). Sau đó, với một chất kết dính mô hình mà bạn có thể thêm bảo vệ chống XSS cụ thể của bạn:
public class CutstomModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.Attributes.OfType<CustomAntiXssAttribute>().Any())
{
var valueResult = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);
var filteredValue = SOME_CUSTOM_FILTER_FUNCTION_HERE(valueResult.AttemptedValue);
propertyDescriptor.SetValue(bindingContext.Model, filteredValue);
}
else // revert to the default behavior.
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
}
Sau đó bên SOME_CUSTOM_FILTER_FUNCTION_HERE
mà bạn có thể sử dụng những gì @Yogiraj đề nghị, hoặc sử dụng một biểu thức chính quy, hoặc thậm chí áp dụng lọc HtmlAgilityPack-based.
P.S. Đừng quên để thêm ModelBinders.Binders.DefaultBinder = new CutstomModelBinder();
để Application_Start (Tôi quên :))
Mã chưa được kiểm tra,
public class ADefaultModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelMetadata.RequestValidationEnabled)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
value = value.Replace("&", "");// replace existing & from the value
var encodedValue = Microsoft.Security.Application.Encoder.HtmlEncode(value);
bindingContext.ModelMetadata.RequestValidationEnabled = encodedValue.Contains("&"); // Whether AntiXss encoded a char to &..
}
return base.BindModel(controllerContext, bindingContext);
}
}
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new ADefaultModelBinder();
tôi sẽ đi để thay thế những AllowHtml
thuộc tính với RegularExpression
kiểm chứng thực dữ liệu chú thích. Ưu điểm là bằng cách này, bạn có thể bẫy lỗi và hiển thị cho người dùng những gì đã xảy ra trong khi lỗi trước đây kích hoạt lỗi ở mức toàn cầu.
Ví dụ:
public class MyViewModel
{
[DataType(DataType.MultilineText)]
[RegularExpression(@"^[^\<\>]*$", ErrorMessage = "May not contain <,>")]
public string Text { get; set; }
}
- 1. Làm thế nào để bảo vệ thuộc tính mô hình Rails?
- 2. Thuộc tính nội bộ được bảo vệ so với Thuộc tính được bảo vệ và Chia sẻ lại
- 3. Đặt thuộc tính được bảo vệ với FactoryGirl
- 4. "CẢNH BÁO: Không thể gán số lượng lớn các thuộc tính được bảo vệ"
- 5. Tải lại thuộc tính mô hình
- 6. Tính năng ẩn/Thuộc tính/Thuộc tính/Thẻ của CSS3 và HTML
- 7. Các khóa động JBuilder cho các thuộc tính mô hình
- 8. Thuộc tính mô hình động Ember.js
- 9. mô hình Django & Python lớp thuộc tính
- 10. Xóa thuộc tính khỏi mô hình Backbone.js
- 11. Lỗi Rails: Không thể gán khối lượng thuộc tính được bảo vệ: interest_ids?
- 12. Cách tạo thuộc tính đối tượng được bảo vệ trong JavaScript
- 13. Truy cập các thuộc tính mô hình trong Rails
- 14. Tại sao Ninject không giải quyết các thuộc tính được bảo vệ trong lớp cơ sở?
- 15. Backbone.JS xử lý các mô hình với các thuộc tính được tính như thế nào
- 16. Các tính năng thuộc tính video được đệm trong HTML5
- 17. Đường ray - Thêm thuộc tính không có trong mô hình và cập nhật thuộc tính mô hình
- 18. Khuôn khổ thực thể Mã CTP4 Đầu tiên: Lập bản đồ các thuộc tính được bảo vệ
- 19. Sử dụng Rails 3.1: as =>: admin để cập nhật các thuộc tính được bảo vệ bởi attr_accessible
- 20. Ý nghĩa thuộc tính thuộc tính trong html
- 21. Trường C# được bảo vệ thành riêng tư, thêm thuộc tính - tại sao?
- 22. Có thể ghi đè thuộc tính bắt buộc trên thuộc tính trong mô hình không?
- 23. Chọn thuộc tính mô hình bằng lambda chứ không phải tên thuộc tính chuỗi
- 24. Cách đặt thuộc tính động trên mô hình với Backbone.js
- 25. Làm cách nào để tìm kiếm các thuộc tính bên trong của lớp C#? được bảo vệ? được bảo vệ nội bộ?
- 26. ValidationMessageFor chỉ với mô hình và thuộc tính html - MVC 3
- 27. Scala bảo vệ mô hình có hoặc phù hợp với
- 28. ActiveModel :: MassAssignmentSecurity :: Lỗi: Không thể hàng loạt assign bảo vệ thuộc tính
- 29. Không thể chỉ định khối lượng thuộc tính được bảo vệ: tags_attributes?
- 30. Thuộc tính căn chỉnh hình ảnh trong HTML 5
BẠN KHÔNG THỂ kế thừa từ ALLOWHTMLATTRIBUTE "Đó là một lớp niêm phong" – VJAI