2016-12-14 90 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