2016-12-14 120 views
-3

我發現文檔談論「評估和演示是邪惡的」,我的理解是有性能問題,甚至MSDN說明它:評估安全性?

因爲這種方法進行後期綁定的評價,使用反射 在運行時,它可能會導致性能相比 標準ASP.NET數據綁定語法明顯慢 - MSDN

出了性能問題下面的代碼,並考慮:

<%# Eval("MyDataFieldFromDataBase") %> 

可以做些什麼來防止字段被危險地解釋(以防止代碼注入)?

+0

您還沒有明確表示「hack」是什麼意思。 – mason

+0

使eval做任何事情比顯示'Foo.MyDataFieldFromDatabase'的值。 –

+0

爲什麼?你想達到什麼目的? – mason

回答

1

我相信你在談論一些不同的Eval,而不是ASP.NET的。在aspx中的Eval只是一個method,它和其他方法一樣有害。

它的一個潛在問題是,Eval返回一個對象,所以如果你的代碼沒有期待這個特定的類型,你可以得到無效的轉換異常。因此,您在頁面上使用Eval時沒有類型安全性。另一件事是Eval不會做任何類型的轉義,所以如果你的數據庫中有潛在危險的內容,它將被Eval返回。但是這不是特定於Eval的問題,您只需確保您清理所有用戶輸入,Eval就無關緊要。

除此之外ASP.NET的Eval是完全無害的。

+0

是的,你是對的我正在談論Aspx。但我標記的asp.net我會糾正這一點,你可以編輯你的文章,以反映這一點。我錯了,eval是邪惡的不適用於aspx Eval。這很好的知道。我期待着找到一些東西來強制團隊停止使用它,但沒關係。我只會編輯他們的代碼。 –

+1

你的標籤對我來說看起來很好,你在問關於ASP.NET eval。 aspx只是ASPNET使用的標記頁的類型。無需重新編碼 – Andrei

+0

Eval本身可能不會轉義,但對於ASP.NET 4.5,您可以使用'<#:Eval(「SomeField」)%>'語法對任何輸出進行編碼並防止將腳本插入到客戶端。 – mason