2012-06-04 20 views
6

Tôi đã đọc qua rất nhiều thông tin đăng trên SO về XSS và cách xử lý. Nói chung, sự đồng thuận là danh sách trắng trong danh sách cấm và tránh sử dụng Biểu thức chính quy (quá nhiều biến thể để xử lý).TinyMCE, AntiXSS, MVC3 và GetSafeHtmlFragment

Tôi đang làm việc trên ứng dụng ASP.Net MVC3. Tôi cần có thể hiển thị HTML từ mục nhập của người dùng (ví dụ: < strong>, < ul>, < li>, v.v ...) nhưng tôi không muốn có bất kỳ rủi ro XSS nào.

Tôi đang sử dụng gói AntiXSS qua Nuget. Trong mô hình của tôi, tôi có

[AllowHtml] 
public string UserDetails{ get; set; } 

Theo quan điểm của tôi, tôi có TinyMCE nối vào vùng văn bản.

Trong điều khiển của tôi, tôi nhận được bài từ Xem và khử trùng nó:

using Microsoft.Security.Application; 
... 
string SanitizedDetails = Sanitizer.GetSafeHtmlFragment(model.UserDetails); 

Câu hỏi của tôi: Tôi đã làm điều đó đúng không? Tôi có được bảo vệ khỏi hầu hết các vấn đề XSS hay tôi đang sủa cây sai không?

Trả lời

4

Bạn được đăng đối với một số biểu mẫu nhất định. Cho phép html là một hoạt động nguy hiểm vì nó là, vì vậy bạn đang cố gắng để giảm thiểu nó tốt nhất bạn có thể. Cách tiếp cận của bạn khá tốt ở đây.

Có các tùy chọn khác để giúp nhưng tiếc là không phải mọi thứ đều sẵn sàng cho sản xuất. Có các tiêu đề Chính sách bảo mật nội dung được hỗ trợ một phần bởi các trình duyệt khác nhau. Ex: http://www.w3.org/TR/CSP/

Vì vậy, những gì bạn có là đàng hoàng, nhưng bạn có thể tăng cường này một chút nếu bạn muốn dấn thân vào chính sách bảo mật nội dung (đối với một)

tôi đi qua một vài cuộc tấn công khá XSS đây nếu bạn quan tâm đến. http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app

Bạn có thể muốn thêm một lần khử trùng trước khi hiển thị (và trước khi lưu) trong trường hợp một cuộc tấn công khác (ví dụ: chèn sql) đã chèn mã xss vào html của bạn.

0

Khi chúng tôi sử dụng Sanitizer.GetSafeHtmlFragment(model.UserDetails); với sự trợ giúp của Danh sách trắng, nó sẽ không cho phép bất kỳ thẻ nào thực thi qua nó. Ví dụ:

model.UserDetails = "Testdata `<script>alert('Malicious Code');</script>`" 

Đây là mã tiêm, phương pháp SafeHtmlFragment không cho phép thẻ <script> thực thi.

model.UserDetails = "Testdata `<a href="www.google.com">Google <a/>`" 

Đây là mã an toàn để trả về văn bản và siêu liên kết Google để điều hướng đến google.com.

Khi model.UseDetails chỉ trả lại Testdata làm đầu ra.