在Microsoft Ajax中伪造__EVENTVALIDATION

时间:2012-10-30 21:44:10

标签: asp.net microsoft-ajax

我正在为网站制作移动应用程序以查看您的日程安排。他们不提供任何API,也无意制作API。

该网站只能使用Ajax,但要伪造这些请求并抓取我需要伪造__EVENTVALIDATION帖子字段的网站。

我无法控制网站,我从未使用ASP.NET或Microsoft Ajax构建任何内容。

有没有人这样做过?

我发现__EVENTVALIDATION字段有这种模式(...表示根据请求更改的字节,base64解码版本的hexdump):

d8 01 16 13 02 4f 0a
...
f6 e0 84 d4 05 02 a0 3f
e2 3f 03 02 3f d8 d1 d5 0c 02 bb 82 cf ec 08 02
b4 b5 99 f8 0b 02 3f 89 3f eb 04 02 d5 83 90 88
0a 02 8a db 94 90 03 02 8b cf 3f 85 08 02 93 3f
b1 3f 06 02 9b 3f 8f a5 02 02 b5 b4 af 85 01 02
d1 fc ae 9c 0e 02 b4 e2 94 9e 0a 02 3f e2 94 9e
0a 02 3f e2 94 9e 0a 02 bb 92 80 a5 06
...                                  

2 个答案:

答案 0 :(得分:8)

在构建ASP.NET站点的scraper之前,我已经解决了这个问题。您需要请求浏览器用户通常登陆的初始页面,提取__VIEWSTATE__EVENTVALIDATION哈希值,然后使用这些哈希值对您实际需要的数据进行第二次请求。

例如,如果您正在从表单提交中抓取响应:

  1. 对表单所在的页面发出AJAX请求
  2. 从响应中提取视图状态和事件验证哈希值
  3. 制作一个新的AJAX请求,模拟表单提交,将哈希作为参数传递
  4. 如果您正在寻找JavaScript函数来从标记中提取哈希值,我已经在GitHub上发布了我用作ms-viewstate的那些。

答案 1 :(得分:1)

__EVENT VALIDATION 是一项安全措施。

  

该功能可防止潜在恶意用户从客户端发送的未经授权的请求。为确保每个回发和回调事件都源自预期的用户界面元素,该页面会在事件上添加额外的验证层。该页面基本上将请求的内容与__EVENTVALIDATION字段中的信息进行匹配,以验证客户端上是否未添加额外的输入字段,并且在服务器上已知的列表上选择该值。该页面在呈现期间生成事件验证字段 - 即在信息可用时的最后可能时刻。与视图状态一样,事件验证字段包含哈希值以防止客户端篡改。

哈希值基于服务器级别的密钥。所以你不能复制那个哈希 - 或者更确切地说,如果你没有访问服务器,我猜你发现了一个安全漏洞。

参考:MSDN