1、伪造来源地址:使用IdHttp可以伪造这个来源地址,而且很简单,只要在访问某地之前加上一句:
IdHttp1.Request.Referer := 'pics/www.3464.com/';
那么来源地址就变成了pics/www.3464.com/而不是你实际的来源地址了。
2、Cookie欺骗:
如何用idhttp提交自己构造过的Cookie
我不知道的是:如果把自己构造过的Cookie传给idhttp让它提交。
比如站点pics/www.aaa.com 是要cookie的。我已经在程序上放了idhttp和IdCookieManager。
我getpics/www.aaa.com 后,idhttp通过IdCookieManager已经得到当前站点的Cookie了。我可以用
for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do memo1.Lines.Add(IdCookieManager1.CookieCollection.Items[i].CookieText);
得到。
现在,如果我想更改这个cookie,或者说我想按这个Cookie的格式重新写一个,再用idhttp进行post。我应该怎么做?
用途是Cookie欺骗等。
如:
得到的Cookie为:skin=2; ASPSESSIONIDSQTSABQD=IEMKPIDBKKMEEKEHLLOIJJON; UserCode=3CA001D63984E6115FE55681%2E95
我更改为:skin=123; ASPSESSIONIDSQTSABQD=IEMKPIDBKKMEEKEHLLOIJJON; UserCode=3CA001D63984E6115FE55681%2E95
我再post
在Idhttp中,要想修改Cookie的代码,就要用到Request的RawHeaders中的Values值。
这个值怎么用呢?
Values接受一个string的值,该值指定了所访问的变量。
如HTTP头是这样定义的(其中一些):
Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Cookie: JSESSIONID=aoOYvjM-IKzh
而Values的值就可以是Cookie,User-Agent,Accept-Encoding……等等。
RawHeaders必须初始化后才可用。
正确的代码应该是这样:
try idhttp1.Request.SetHeaders;//最重要的初始化。idhttp1.Request.RawHeaders.Values['Cookie'] := '这里是cookie的值'; idhttp1.Post('/webmail/login.jsp',data1,data2); except idhttp1.Get(idhttp1.Response.Location, data1); end; http.Request.SetHeaders;//必须加上,才能完成下面的工作 //http.Request.RawHeaders.Values['Cookie']:=_SESSION;//自定义Cookie //http.Request.CustomHeaders.Values['Cookie']:=Cookie; //也得加上,不然Cookie没有意义,研究了很多 http.Http.Request.CustomHeaders.Text:='Cookie: '+Cookie;//最强悍的一个,上面两种方式有时候就是不行 http.HandleRedirects:= true; http.Request.UserAgent := 'OS/1.0';//自定义客户端的签名,可以自定义 http.request.ContentType:='application/x-www-form-urlencoded';//使用POST方式提交时候,必须加上 http.Request.Referer :='pics/www.4936.cn/index.php'; http.Request.Host:=www.test.cn;
3、代理服务器:
使用idhttp控件,调整代理服务器参数也可以实现通过代理服务器访问。
idhttp1.ProxyParams.ProxyServer :=proxyip.Text ;//代理地址idhttp1.ProxyParams.ProxyPort :=StrToInt(port.text);//端口//如果代理需要验证idhttp1.ProxyParams.ProxyUsername:=uname.Text ;//用户名idhttp1.ProxyParams.ProxyPassword:=pw.Text ;//密码
如果是在局域网内,代理不成功。