web服务验证事件合法请求,使用到了__VIEWSTATE、__EVENTVALIDATION、cookie来验证
2018-03-05 12:52
585 查看
__VIEWSTATE
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值
__EVENTVALIDATION
__EVENTVALIDATION只是用来验证事件是否从合法的页面发送,只是一个数字签名,所以一般很短。
“id”属性为“__EVENTVALIDATION”的隐藏字段是ASP.NET 2.0的新增的安全措施。该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求.
为了确保每个回发和回调事件来自于所期望的用户界面元素,ASP.NET运行库将在事件中添加额外的验证层。服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。ASP.NET运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。
说明:“id”属性为“__EVENTVALIDATION”隐藏字段一般在表单的最下方,如果表单在浏览器端尚未解析完毕时,用户提交数据有可能导致验证失败。于是关键的关键是获取这两个值。运用正则,在爬取之前先open一次url获取值,然后在第二次爬取的时候把这个值传进post参数里面
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值
__EVENTVALIDATION
__EVENTVALIDATION只是用来验证事件是否从合法的页面发送,只是一个数字签名,所以一般很短。
“id”属性为“__EVENTVALIDATION”的隐藏字段是ASP.NET 2.0的新增的安全措施。该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求.
为了确保每个回发和回调事件来自于所期望的用户界面元素,ASP.NET运行库将在事件中添加额外的验证层。服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。ASP.NET运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。
说明:“id”属性为“__EVENTVALIDATION”隐藏字段一般在表单的最下方,如果表单在浏览器端尚未解析完毕时,用户提交数据有可能导致验证失败。于是关键的关键是获取这两个值。运用正则,在爬取之前先open一次url获取值,然后在第二次爬取的时候把这个值传进post参数里面
#coding:utf-8 import requests import re url1 = "http://wx.ismartgo.com/sso/Login.aspx?code=f8a56609c3b44693aa7f655600cc280c&appid=op"#获取参数网址 url2 = "http://wx.ismartgo.com/sso/Login.aspx?code=0ecd89621b924c49b224ba39712a47ff&appid=op"#账号密码登录接口 #使用正则从url1获取以下参数 r1 = requests.get(url1) r1txt = r1.text VIEWSTATE =re.findall(r'id="__VIEWSTATE" value="(.*?)" />', r1txt,re.I) EVENTVALIDATION =re.findall(r'id="__EVENTVALIDATION" value="(.*?)" />', r1txt,re.I) #url2请求头,请求body header = { "Connection": "keep-alive", "Content-Length": "411", "Cache-Control": "max-age=0", "Origin": "http://wx.ismartgo.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Referer": "http://wx.ismartgo.com/sso/Login.aspx?code=4c8b7a50534346ba9c5b40b5a32642d1&appid=op", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.8", "Cookie": "ASP.NET_SessionId=sd1vav45ejfiew452sknthu3; sso_oauth_user=user=&md5=D41D8CD98F00B204E9800998ECF8427E" } data = { "txtLoginName": "***", "txtPassword": "****", #使用url1获取的参数 "__VIEWSTATE": VIEWSTATE, "__EVENTVALIDATION": EVENTVALIDATION, "chkKeepLogin": "on", "btnLogin": "%E7%99%BB%E5%BD%95" } r = requests.post(url2,headers=header,data=data) print("状态码",r.status_code) print(r.headers) print(r.text)
相关文章推荐
- pyton简单网络爬虫,aspx网站中form使用到了__VIEWSTATE、__EVENTVALIDATION、cookie来验证的提交
- 禁用Viewstate在使用母版的内容页面里使用Datalist可能不触发事件的解决方案
- Kaneboy.Web.ViewState使用说明
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- HttpWebRequest支持带ViewState的网页POST请求
- Kaneboy.Web.ViewState使用说明
- Web服务中使用Soap标头自定义身份验证和授权
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- C#的HttpWebRequest编程,支持带ViewState的网页POST请求
- C#使用HttpWebRequest进行HTTP请求发送和接收的一些小结。(新增修复.NET4.0以下关于cookie的bug)
- ASP.NET笔记之页面跳转、调试、form表单、viewstate、cookie的使用说明
- 通过 JMS Web 服务使用请求响应 SOAP
- 使用Application、Session、Cookie、ViewState等对象
- 使用 IBM Rational Tester for SOA Quality 在 Web 服务测试中添加元素和验证点 developerWorks
- 使用带验证的Web服务
- 通过使用客户端证书调用 Web 服务进行身份验证{转}
- Session ViewState Cookie 的使用
- 使用webView访问https的url-处理SslError解决android2.2版本之前的https请求问题
- 使用Application、Session、Cookie、ViewState和Cache等对象保存信息的区别