2010-10-25 9 views
12

Tôi có ứng dụng Biểu mẫu web ASP.NET. Có một trang với TextBoxes và người dùng nhập cụm từ tìm kiếm vào các cụm từ được sử dụng để truy vấn cơ sở dữ liệu.Cách Html.Encode trong biểu mẫu web

Tôi biết rằng tôi cần phải ngăn chặn các cuộc tấn công bằng JavaScript. Làm thế nào để tôi làm điều này?

Trong MVC tôi sẽ sử dụng Html.Encode. Dường như nó không được công nhận trong biểu mẫu web.

Cảm ơn!

Trả lời

3

Bạn có thể sử dụng Server.HtmlEncode (mà dịch để HttpServerUtility.HtmlEncode), nhưng Microsoft có một thư viện bảo vệ web tốt hơn được gọi là AntiXSS mà bạn có thể tải về từ CodePlex. Nó bao gồm một tiện ích sử dụng cách tiếp cận danh sách trắng đến HtmlEncoding (an toàn hơn và tốt hơn, và recommended by OWASP mặc dù chúng trỏ đến một số older version). Nó cũng có các công cụ cho phép bạn nhận được các đoạn HTML an toàn, v.v.

Nếu bạn không nhìn thấy gì khác, hãy xem OWASP top 10. Có vẻ như bạn chỉ đang làm xước bề mặt của bảo mật ứng dụng web và đây là tài nguyên tốt nhất hiện có. Tấn công Cross-Site Scripting chỉ là một trong những thứ bạn cần để chống lại.

Nó cũng là một trong những bạn sẽ cần phải phù hợp với nếu bạn phải đối phó với bất kỳ loại phù hợp (PCI, cờ đỏ, vv)

+0

Tôi rất tiếc, nhưng tính năng lọc đầu vào chống XSS nghiêm túc không thay thế cho văn bản thuần hóa mã hóa HTML ở giai đoạn đầu ra HTML. Tất cả các công cụ chống XSS là mỏng manh, mangle hợp lệ đầu vào và không đầy đủ: tốt nhất là một thạch cao gắn bó cho các ứng dụng kém bằng văn bản với các vấn đề thoát HTML và không phải là một chữa bệnh mà thực sự giải quyết vấn đề. – bobince

+0

Hãy bình luận nếu bạn downvoting vì vậy tôi có thể học từ những sai lầm của tôi ... – David

+0

(Xin lỗi vì -ve, nhưng nó là một vấn đề nghiêm trọng với các tác giả webapp ngây thơ rằng họ đang gắn bó với nhau nhiều hình thức đầu ra từ chuỗi văn bản không Việc thoát HTML, mã hóa JSON, mã hóa URL hoặc bất kỳ loại mã hóa theo ngữ cảnh nhạy cảm nào khác là bắt buộc đối với tác vụ cụ thể. Sau đó, chúng mong đợi lớp chống XSS lọc đầu vào bằng cách nào đó sửa chữa tất cả. hơn là đánh các vấn đề dưới tấm thảm.) – bobince

4

On webforms bạn có thể gọi

HttpUtility.HtmlEncode(foo); 

Cẩn thận để không mã hóa kép.

+0

+1 cho 'cẩn thận để không mã hóa đôi'. Mã hóa đầu tiên => [< kiểm tra >], mã hóa thứ 2 => [& lt; test & gt;] – Stacked

3

Nếu bạn đang ở trên 4 ASP.NET hoặc phiên bản mới hơn, bạn có thể sử dụng cú pháp này:

<%: Model.Username %> 

nào sẽ HTML mã hóa biểu thức. Scott Gu explains the benefit of this syntax:

Chúng tôi chọn <%:%> cú pháp để nó sẽ được dễ dàng để nhanh chóng thay thế các trường hợp hiện tại của <% =% khối> Mã. Nó cũng cho phép bạn dễ dàng tìm kiếm mã cơ sở của mình cho các phần tử <% =%> để tìm và xác minh bất kỳ trường hợp nào bạn không sử dụng mã hóa HTML trong ứng dụng của mình để đảm bảo rằng bạn có hành vi đúng.