EnableEventValidation ="false" - 一个好主意?

Com*_*umb 5 c# asp.net

可能重复:
<pages enableEventValidation ="false">的目的

我还有另一个相关问题没有答案:我的stackoverflow问题

但是,如果我设置,我的问题就会消失EnableEventValidation="false".

现在我的问题是,如果我设置它,它会成为一个非常大的问题MasterPage吗?

在所有参考设置中false,没有人提出除MSDN之外的安全问题.

有什么建议?

Tim*_*ora 15

删除事件验证会减少应用程序中的安全检查点数量.问题是,这有关系吗?

一个重要的简单例子

用户有两个选项,因为他们是站点上的"银牌"成员.他们制定了一个实际提交选项#3的请求,并获得了他们没有支付的"黄金"特权.

一个可能无关紧要的例子

用户可以制作请求,声明他们居住在不在页面下拉列表中的国家/地区.您正在运行一个事务性关系数据库,该数据库使用外键约束捕获此数据库.用户收到错误,没有数据持久或损坏.

我建议让您的数据库执行验证吗?当然不是.但在这个例子中,没有造成任何伤害.

如有疑问,请假设它确实重要,并且有人会找到破解代码的方法.

理想的方法

首先,确定事件验证失败的原因.根据我的经验,这通常是由于滥用页面/控件设计造成的.在15年以上的.NET开发中,我只见过事件验证打破了控件的设计.这种控制非常复杂,最终不得不重写.换句话说,如果事件验证导致控件出现问题,您可能应该重新考虑控件的设计,而不是禁用事件验证.

最后:

在服务器端识别并验证关键业务规则,并独立于ASP.NET.不要依赖框架来完成你的工作; 很容易认为安全性是"处理"的,并且在设计中留下了一个漏洞.

  • @Marcel - 因此是粗体的最后一段,"在服务器端识别并验证您的关键业务规则,独立于ASP.NET." 也就是说,事件验证*是*服务器端机制.保持启用状态比完全不执行任何操作更好. (4认同)