2013-03-26 58 views
13

Hãy tha thứ cho tôi nếu đây là một câu hỏi ngớ ngẩn. Tôi đã không thể tìm thấy câu trả lời được nêu rõ ràng.Liệu Bind() hoặc Eval() tự động HtmlEncode để bảo vệ chống lại XSS?

tôi hiếm khi sử dụng Bind() hoặc Eval() trong trang aspx của tôi, và thay vào đó sử dụng cú pháp sau: (Giả sử đây là trong một ItemTemplate trong một điều khiển Repeater)

<asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %> 

Tôi bắt đầu làm một này thời gian dài trước đây và chỉ đơn giản là không bao giờ đặt câu hỏi đó, nhưng bây giờ nó xảy ra với tôi rằng điều này có thể là quá mức cần thiết. Và bây giờ tôi đang sử dụng một CMS sử dụng cú pháp này ở khắp mọi nơi:

<asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %> 

Vì vậy, tôi tự hỏi, về cơ bản, nếu tôi sử dụng Bind() hoặc Eval() không thời gian chạy tự động HtmlEncode đầu ra? Tôi đã làm mã hóa không cần thiết tất cả cùng?

Trả lời

18

Ràng buộc() và Eval() KHÔNG làm bất cứ điều gì để ngăn chặn loại điều đó và không mã hóa. Không làm các khối mã kiểu <%# %>.

Tuy nhiên, nếu bạn đang sử dụng ASP.NET 4 trở lên, bạn có thể sử dụng các khối <%: %> để xử lý tình huống này cho các kiểu ghi phản hồi và <%#: %> cho các tình huống liên kết dữ liệu.

Scott Guthrie có số lượng lớn post về điều này.

+0

Có vẻ như goocd, nhưng có vẻ như nó có nghĩa là '<%= %>' (Phản hồi.Write tương đương) không phải là '<%# %>' các khối như bạn thấy trong ngữ cảnh DataBinding. Có một cách viết tắt tương đương cho các điều khiển databound đúng không? – David

+1

Đừng bận tâm. Tìm thấy nó ở đây cho 4,5: http://www.asp.net/vnext/overview/aspnet/whats-new#_Toc318097391 Cảm ơn bạn đã chỉ cho tôi đúng hướng! – David

+0

David Xin lỗi về điều đó, tôi cũng đã cập nhật câu trả lời –