一、问题起因

  最近项目中有一页面第一次search后正常,但是再次点击其它任何按钮都会报错,亦即postback后页面有问题,经检查是由于页面有一GridView且数据量极大,记录大概有上千条,这儿解释一下,本页面不允许分页要求所有的记录都要显示已方便使用,另你可能说为啥要用GridView啊?这也不是本文要讨论的问题。

  经查,ASP.NET对postback是有限制的,确切地说是对postback后form上fields的集合大小的限制,默认大概1000,而我们这个页面仅仅Input, Select等就达到上千,所以才会造成页面出错即Operation is not valid due to the current state of the object.

二、问题解决

  知道了原因,解决起来就容易了,如下在web.config中增加如下配置,把大小直接增加到5000

<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="5000" />
</appSettings>

三、后续说明

  虽然表面上解决了此问题,但是此方案风险极大,微软之所以在2月推出此更新MS11-100 (http://technet.microsoft.com/en-us/security/bulletin/ms11-100.This security update is rated Critical for Microsoft .NET Framework 1.1 Service Pack 1, Microsoft .NET Framework 2.0 Service Pack 2, Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 3.5.1, and Microsoft .NET Framework 4 on all supported editions of Microsoft Windows) 是因为要避免HTTP POST Hash Collision Dos即Hash碰撞的拒绝服务攻击,此漏洞影响盛广,Java, Python, PHP, Ruby等无一幸免,当然ASP.NET也在受害之列.

攻击原理: 该安全弱点利用了各语言的Hash算法的非随机性可以制造出N多的value不一样,但是key一样数据,然后让你的Hash表成为一张单向链表,而导致你的整个网站或是程序的运行性能以级数下降(可以很轻松地让你的CPU升到100%

Hash散列攻击: http://stackoverflow.com/questions/8669946/application-vulnerability-due-to-non-random-hash-functions

    http://www.cs.rice.edu/~scrosby/hash/CrosbyWallach_UsenixSec2003.pdf

PHP攻击版本实现:http://blog.csdn.net/linvo/article/details/7169718 (仅供参考)

解决方法:

  1. Restrict the number of POST parameters (限制请求数 – MS11-100干的就是这个事)
  2. Restrict the size of the POST request (限制请求大小)
  3. Web Application Firewall

  

四、参考链接

  http://forums.asp.net/t/1585040.aspx/1

  http://stackoverflow.com/questions/8832470/operation-is-not-valid-due-to-the-current-state-of-the-object-error-during-pos

最新文章

  1. 使用packer制作vagrant centos box
  2. GetStartupInfo 反调试
  3. 用纯css写出三角形
  4. QFormLayout
  5. 设置cas server使用http非安全协议
  6. 07-2. A+B和C (15)
  7. Java多态(二)
  8. 在Visual Studio中入门F#
  9. SQL- 行转列,多行转多列 - max 函数
  10. git教程:版本退回
  11. Visible Lattice Points SPOJ - VLATTICE 三维+莫比乌斯反演
  12. Android -------- MVC,MVP 和 MVVM 架构设计模式
  13. cnn的说明
  14. 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~
  15. Bulk Convert DOC to DOCX
  16. 解决复制到keil编辑器中汉字出现乱码情况
  17. HDU 3342:Legal or Not(拓扑排序)
  18. redis cluster 的ERR max number of clients reached 问题排查
  19. ES6 标签模板
  20. tensorflow学习笔记(三十九):双向rnn

热门文章

  1. Boa服务器移植
  2. Java集合类框架的基本接口有哪些?
  3. 【BZOJ2423】最长公共子序列(动态规划)
  4. BZOJ 2738 子矩阵第k大 | 二维树状数组 整体二分 分治
  5. 【uoj122】 NOI2013—树的计数
  6. Web Service(下)
  7. 手机数据抓包的N种方法
  8. Spring MVC使用Cors实现跨域
  9. Eureka的原理
  10. Docker管理工具-Swarm