limit session to original IP

This commit is contained in:
Massimo Melina 2020-05-14 13:03:31 +02:00
parent 8a622be58d
commit ef4340fc59

View File

@ -1,4 +1,4 @@
{ {
Copyright (C) 2002-2014 Massimo Melina (www.rejetto.com) Copyright (C) 2002-2014 Massimo Melina (www.rejetto.com)
This file is part of HFS ~ HTTP File Server. This file is part of HFS ~ HTTP File Server.
@ -295,7 +295,7 @@ type
vars: THashedStringList; vars: THashedStringList;
created, ttl, expires: Tdatetime; created, ttl, expires: Tdatetime;
public public
id, user: string; id, user, ip: string;
constructor create(const sid:string=''); constructor create(const sid:string='');
destructor Destroy; override; destructor Destroy; override;
procedure setVar(const k,v:string); procedure setVar(const k,v:string);
@ -4881,10 +4881,11 @@ var
+'filename*=UTF-8'''''+s+'; filename='+s)); +'filename*=UTF-8'''''+s+'; filename='+s));
end; end;
procedure sessionSetup(); function sessionSetup():boolean;
var var
sid: string; sid: string;
begin begin
result:=TRUE;
if data = NIL then if data = NIL then
exit; exit;
data.user:=''; data.user:='';
@ -4897,11 +4898,21 @@ var
if sid = '' then if sid = '' then
begin begin
data.session:=Tsession.create(); data.session:=Tsession.create();
data.session.ip:=conn.address;
conn.setCookie(SESSION_COOKIE, data.session.id, ['path','/'], 'HttpOnly'); // the session is site-wide, even if this request was related to a folder conn.setCookie(SESSION_COOKIE, data.session.id, ['path','/'], 'HttpOnly'); // the session is site-wide, even if this request was related to a folder
end end
else else
try data.session:=sessions[sid] try
except data.session:=Tsession.create(sid) // probably expired data.session:=sessions[sid];
if data.session.ip <> conn.address then
begin
conn.reply.mode:=HRM_DENY;
result:=FALSE;
exit;
end;
except
data.session:=Tsession.create(sid); // probably expired
data.session.ip:=conn.address;
end; end;
end; end;
data.session.keepAlive(); data.session.keepAlive();
@ -5286,7 +5297,8 @@ var
exit; exit;
end; end;
sessionSetup(); if not sessionSetup() then
exit;
if mode = 'logout' then if mode = 'logout' then
begin begin
data.logout(); data.logout();