【问题标题】:purpose for <pages enableEventValidation="false"><pages enableEventValidation="false"> 的用途
【发布时间】:2009-10-01 12:18:11
【问题描述】:

我在 web.config 中使用了以下内容

<pages enableEventValidation="false">

这解决了我们在使用 Ajax 时遇到的问题。

我们有一个网页,如果您直接使用标准 HTML 超链接浏览该网页,效果很好。

如果您通过 gridview 中的链接和 RowCommand 事件中的 response.redirecting 从另一个页面浏览到该页面,则该页面在查询字符串中传递了一个 ID。该页面从面板内的控件中抛出错误,说明

“无效的回发或回调参数。事件验证在配置中启用或在页面中使用 。出于安全目的,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。"

我很高兴将页面验证设置为 false,因为它似乎没有其他效果。

有什么想法吗?

【问题讨论】:

  • 我发现this response 在一个欺骗问题上非常好,但在这里却没有。

标签: asp.net


【解决方案1】:

阅读documentation

编辑:出于安全原因,最好尽可能将其设置为 true。

因此,我建议您仅在导致问题的单个 AJAX 页面上将其设置为 false,而在 web.config 中将其设置为 true。

【讨论】:

  • 我当然读过它,但我发现有限的解释只会让我相信除非有人故意尝试恶意,否则我将其设置为 false 没有问题,这并不意味着其余的的页面现在将表现不同。从那以后,我认为将其保留为假对我来说是安全的。应用内网,不怕恶意攻击。
  • 经过更多研究后,我将使用建议的 EDIT。这对应用程序来说是有意义的,它现在又甜美地歌唱了,一切都被 ajaxed 了。
【解决方案2】:

来自here

由于事件验证功能,基本上会引发 Invalid PostBack 或 CallBack 参数错误。 EventValidation 功能是 ASP.NET 2.0 中的一项新功能,它提供了额外的检查级别,以验证来自客户端控件的回发是否确实来自该控件,而不是来自使用跨站点脚本注入之类的恶意软件的人尝试和操纵事物。这是我们在编程模型中不断增加深度安全性的总体战略的一部分,这样即使开发人员忘记添加自己的安全检查,他们也可以在默认情况下获得安全。

现在,当您触发 click 事件并且对象正在重新绑定或在 Page_Load 事件中更改其属性或有人试图通过跨站点入侵您的系统时,可能会发生 Invalid PostBack 或 CallBack 参数错误脚本。 每次 .Net Framework 呈现页面时,它都会为所有控件关联一个唯一的 Guid。 在绑定gridview 或repeater 时,每个databind 框架都会为contorl 关联一个新的guid。因此,每次触发事件时,请确保 Page_Load 事件不会更改控件,因为如果控件发生更改,它将有一个不同的 Guid,该 Guid 已经触发了回发事件。 以下是出现此错误的一些场景.

1) GridView 中的回发或回调参数无效 问题可能是:您正在将 Page_Load 事件中的数据与对象数据源或手动绑定与函数调用绑定。这将使您的 GridView 在任何控件的每个事件触发上绑定数据。当您使用 OnRowCommand 触发任何 GridView 命令时,在 RowCommand 触发之前,您的 GridView 将重新绑定,并且其中的所有控件都将分配给新的 id。所以 RowCommand 无法获取触发事件的项目。 GridView中Postback或Callback参数无效的解决方法:你可以在这个if条件下绑定你的数据

   if (!IsPostBack)

   {

          //Your code for Bind data 

   }

如果这不起作用,此代码肯定会为您提供解决方案,然后检查是否有任何其他控件没有给出错误。

【讨论】:

  • 感谢您的意见,我确实对此进行了阅读,但努力与结果的比率不是很好;)谢谢
【解决方案3】:

这里有一点值得添加:如果您想禁用特定控件的事件验证,而不是整个页面,有一个解决方法记录在 herehere(现在在 @987654323 中引用@):

只需子类化相关的 WebControl 类,不要在子类上设置SupportsEventValidation 属性。子类将免于事件验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2010-09-18
    • 2011-07-13
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多