2009-03-04 30 views
5

Tôi có một vùng văn bản trong một Ứng dụng ASP.NET MVC nơi người dùng có thể nhập một số văn bản. Khi tôi hiển thị văn bản cho người dùng, tôi sử dụng Html.Encode để ngăn đầu vào độc hại. Vấn đề là người dùng có thể nhập bằng tiếng Tây Ban Nha và có thể anh ta nhập año và số Encode chuyển đổi số này thành a&#241o. Làm thế nào tôi có thể ngăn chặn điều này?Khi mã hóa đầu vào HTML để bảo mật, làm cách nào để tránh mã hóa các ký tự quốc tế như Ñ hoặc ñ?

EDIT: Trong HTML được tạo ra, tôi thấy điều này:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a> 

Sau đó trong trang tôi có điều này, và lần này màn hình hiển thị là chính xác:

<b>a1 'a1' Cama&#241;o</b> 

Đầu tiên được tạo ra này cách:

<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %> 

và thứ hai như sau:

<%= Html.Encode(Model.NAME)%> 

Vì vậy, tôi đoán là sự cố xảy ra với Html.RouteLink.

+0

Đơn khiếu nại của bạn có mã hóa ký tự quốc tế hay người dùng thấy các ký tự được mã hóa thay vì các ký tự mà họ đã nhập không? Nếu đó là sau, thì câu trả lời "mã hóa hai lần vô tình" là chính xác. Nếu không, hãy cho chúng tôi biết. – Eddie

Trả lời

2

Vì vậy, tôi đoán là vấn đề là với Html.RouteLink

Yep. Bạn không phải mã hóa HTML tham số đi vào RouteLink, nó tạo ra chính HTML và do đó sẽ chăm sóc thoát cho bạn.

5

Bạn có mã hóa hai lần không?

Ví dụ: nếu bạn đặt nội dung của Textarea theo chương trình ở phía máy chủ, nội dung đó sẽ tự động mã hóa nội dung khi hiển thị.

Hãy thử xem đầu ra HTML thô của vùng văn bản.

Thông thường khi bạn đặt các lần thoát bên trong nội dung văn bản, nó sẽ hiển thị trong văn bản được giải mã (được hiển thị như ký tự không có dấu mong muốn).

Vì vậy, nó có thể là một vấn đề vô tình Html.Encode hai lần không cần thiết.

Nếu dữ liệu của bạn đã được thoát, bạn có thể muốn bỏ thoát (Html.Decode) trước khi đưa nó vào vùng văn bản.

+0

Cùng suy nghĩ ở đây. +1 – Tomalak

+0

Đã thấy nó. Vẫn áp dụng, không? – chakrit

Các vấn đề liên quan