我正在为网站制作移动应用程序以查看您的日程安排。他们不提供任何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 ...
答案 0 :(得分:8)
在构建ASP.NET站点的scraper之前,我已经解决了这个问题。您需要请求浏览器用户通常登陆的初始页面,提取__VIEWSTATE
和__EVENTVALIDATION
哈希值,然后使用这些哈希值对您实际需要的数据进行第二次请求。
例如,如果您正在从表单提交中抓取响应:
如果您正在寻找JavaScript函数来从标记中提取哈希值,我已经在GitHub上发布了我用作ms-viewstate的那些。
答案 1 :(得分:1)
__EVENT
VALIDATION
是一项安全措施。
该功能可防止潜在恶意用户从客户端发送的未经授权的请求。为确保每个回发和回调事件都源自预期的用户界面元素,该页面会在事件上添加额外的验证层。该页面基本上将请求的内容与__EVENTVALIDATION字段中的信息进行匹配,以验证客户端上是否未添加额外的输入字段,并且在服务器上已知的列表上选择该值。该页面在呈现期间生成事件验证字段 - 即在信息可用时的最后可能时刻。与视图状态一样,事件验证字段包含哈希值以防止客户端篡改。
哈希值基于服务器级别的密钥。所以你不能复制那个哈希 - 或者更确切地说,如果你没有访问服务器,我猜你发现了一个安全漏洞。
参考:MSDN