ViewState和Security Settings生成错误

时间:2009-10-15 20:46:29

标签: asp.net viewstate

我有一个奇怪的重复出现的错误,我认为这与View State和安全设置有关。这个错误出现在我的客户的一个网站上,每天1到6次:

来源:System.Web 错误:/detail.aspx?CaseID = 1852
错误消息:无法验证数据。
堆栈跟踪:在System.Web.Configuration.MachineKeySection。** EncryptOrDecryptData(** Boolean fEncrypt,Byte [] buf,Byte [] modifier,Int32 start,Int32 length,IVType ivType,Boolean useValidationSymAlgo)    在System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)

在线研究导致了一种可能性。我相信它与安全性和ViewState有关。因为这是一个电子商务网站,我采取了额外的步骤,以防止许多款待,包括XSS和CSFR。以下是我采取的步骤:

  • 启用 HTTPOnly Cookie(防范XSS样式攻击)
  • 启用安全Cookie 标记(防止XSS样式攻击)
  • 创建一个BasePage,其中所有页面都继承而不是Page,在Basepage中重写OnInit并将 ViewStateUserKey 设置为SessionID(防止某些CSFR样式攻击)
  • 明确启用validateRequest(默认情况下为On,但可以覆盖)
  • 启用ViewState加密

该网站使用 ASP.NET 3.5 SP1 AJAX 托管在Win2003虚拟服务器上。该页面没有使用缓存,当您将ViewStateUserKey键设置为唯一值(例如SessionID)时,我发现某些文章提示这是一个问题。如果我在浏览器中关闭cookie并尝试查看其中一个产生错误的页面,我可以复制这个确切的错误。

注意,错误消息未提及MAC失败

1 个答案:

答案 0 :(得分:0)

我的理论是那些遇到此错误的人是在具有代理/缓存服务器的网络上。我的解决方案是仅在安全连接时设置ViewStateUserKey。大多数代理/缓存服务器仅设置为缓存HTTP连接,而不是安全连接。