Trong các ứng dụng ASP.net tiêu chuẩn ASP.net cung cấp một số bảo vệ từ các cuộc tấn công XSS với validateRequest ném phát hiện lỗi đầu vào nguy hiểm nếu một số người cố gắng. Chức năng này dường như đã được đưa ra khỏi MVC bất kỳ ý tưởng tại sao?Tại sao yêu cầu xác thực được lấy ra khỏi ASP.net MVC?
Trả lời
Đây là đường khó vượt qua. Là ứng dụng web của bạn chỉ là một tài nguyên web RESTful như nó 'nên' được? Hay là nó đang cố gắng làm nhiều hơn. Điều tiếp theo bạn biết bạn có 100 trường nhập ẩn: __VIEWSTATE, __EVENTTARGET, __EVENTARGUMENT, v.v.
Như bạn đã biết, bạn vẫn có thể ngăn chặn các cuộc tấn công XSS trong MVC. Chỉ cần google it để xem một số ví dụ. Nhưng lý do cơ bản là MVC là một loại ứng dụng web 'khác biệt' khác nhau.
EDIT: Tôi không biết liệu những gì tôi đã nói ở trên có rõ ràng không. Nhưng ý tưởng là MVC sẽ không cố gắng nhiều hơn những gì nó (như ASP.NET). Cả hai đều có điểm mạnh và lý do của họ.
Tôi hy vọng bạn có thứ gì đó mạnh mẽ hơn ValidateRequest để tránh XSS.
Sẽ hữu ích hơn khi đề xuất các phương án thay vì chỉ đơn giản là từ chối một cách tiếp cận. – RedFilter
ValidateRequest có thực sự tồi tệ không? Tôi đảm bảo rằng tôi mã hóa bất kỳ đầu vào html nào của người dùng nhưng sẽ quan tâm đến cách tiếp cận bạn đang dùng? – alexmac
"Magic" là xấu. Nếu bạn không hiểu các lỗ hổng của ứng dụng của bạn và làm thế nào để mâu thuẫn với họ, sự phụ thuộc của bạn vào người khác để làm cho ứng dụng của bạn an toàn là nguy hiểm. Một lỗ hổng trong sự hiểu biết của bạn nên được đào tạo đi, không được dán hình nền. – Will
Tôi tìm thấy giải pháp ValidateRequest là bản hack. Theo ý kiến của tôi 'tránh XSS' là một quy tắc kinh doanh; do đó hãy để Mô hình xử lý tình huống.
Tôi thực sự thích giải thích về mong muốn tuân theo nguyên tắc REST tốt hơn. Với 100 trường ẩn, nó nhắc tôi về một giải pháp ASP mà tôi đã cung cấp vài năm trước; Tôi đã sử dụng sự gia tăng của các trường ẩn để mang siêu dữ liệu. Không đẹp.
Tôi biết câu hỏi này là cũ nhưng tôi nghĩ rằng tôi có thể trả lời nó anyway.
Có thuộc tính bộ lọc hành động ValidateInput có thể được thêm vào hành động.
[ValidateInput(true)]
public ActionResult Foo()
{
}
Bạn cũng có thể sử dụng thuộc tính AllowHtml trên thuộc tính mô hình
public class MyModel
{
public Guid ID { get; set; }
[AllowHtml]
public string SomeStringValue { get; set; }
}
Đã thêm đề cập đến AllowHtmlAttribute. –
Cảm ơn Timothy, tôi không có một trang web cụ thể trong tâm trí. Tôi nghĩ rằng việc xác nhận yêu cầu vẫn còn phù hợp với các restfulnature như itdoest can thiệp với các yêu cầu cho đến khi nó được nhận và sau đó chỉ khi nó có khả năng nguy hiểm. Bạn đang dùng phương pháp gì với xss? – alexmac