首页 > 代码库 > 如何模拟登陆添加了CSRF保护的网站
如何模拟登陆添加了CSRF保护的网站
上次写了篇文章,内容是如何利用WebClient模拟登陆CSRF控制的网站,回复中有人还是不理解,现在另开一篇,打算说说用Python如何来登陆。
开写之前,先说下为什么webrequest不行,常规情况下,我们在利用webrequest的时候,都是如下的形式:
1 string url = "loginurl"; 2 StringBuilder sb = new StringBuilder(); 3 sb.Append("username=un"); 4 sb.Append("&password=up"); 5 sb.Append("&service=sv"); 6 HttpWebRequest requestget = (HttpWebRequest)WebRequest.Create(url); 7 byte[] postData =http://www.mamicode.com/ Encoding.UTF8.GetBytes(sb.ToString()); 8 using (Stream stream = requestget.GetRequestStream()) 9 { 10 stream.Write(postData, 0, postData.Length); 11 } 12 WebResponse reponse1 = requestget.GetResponse(); 13 StreamReader sr2 = new StreamReader(reponse1.GetResponseStream(), Encoding.UTF8); 14 string html2 = sr2.ReadToEnd();
可关键是我们POST过去的数据并没有服务器所认可的CSRF值,在GetResponse处就会报错,要是我们在上面第六行后面添加如下代码:
1 WebResponse reponseget = requestget.GetResponse(); 2 StreamReader sr = new StreamReader(reponseget.GetResponseStream(), Encoding.UTF8); 3 string html = sr.ReadToEnd(); 4 string regx = "<input type=\"hidden\" id=\"lt\" name=\"lt\" value=http://www.mamicode.com/"(?<PID>\\S+?)\" />"; 5 string token = Regex.Match(html, regx).Groups[1].Value; 6 sb.Append("<=" + token);
先获得其值,并加入到postdata的stringbuild中,其它不变,当执行到GetRequestStream的时候,会报System.Net.ProtocolViolationException的错误,此时如果你重新create一个httpwebrequest又会导致csrf值失效。这些就是在模拟登陆具有CSRF保护网站时碰到的问题,所以才有第一篇文章重写WebClient来达到。
今天碰巧在写Python代码,就想利用Python看看怎么来做这样带保护的模拟登陆,简单说来,代码如下:
1 from urllib.parse import urlencode 2 url = ‘somurl‘ 3 r,c = h.request(url,‘GET‘) 4 sc = c.decode(‘utf-8‘) 5 import re 6 regx = r‘<input type="hidden" id="lt" name="lt" value="http://www.mamicode.com/(/S+?)" />‘; 7 pm = re.search(regx,sc) 8 csrf = pm.group(1) 9 body = {‘username‘:‘user‘,‘password‘:‘pass‘,‘lt‘:csrf,‘service‘:‘url‘} 10 r,c = h.request(url,‘POST‘,body=urlencode(body)) 11 print (c.decode("UTF-8"))
感觉还是满简单的。当然我们也还是要利用cookie来达到目的,上面是主要的代码,大家可以参考下。
变量h的定义如下:
1 h = httplib2.Http(‘.cache‘)
可以看到,用的是httplib2这个库。在Python中推荐用其来代替标准库的http客户端。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。