FIX_SESSION_REPLAY
This commit is contained in:
parent
e0051da55e
commit
574f9963d1
@ -9,6 +9,7 @@ use Psr\Log\LoggerInterface;
|
|||||||
|
|
||||||
use App\Models\UserModel;
|
use App\Models\UserModel;
|
||||||
use App\Models\AuthHistoryModel;
|
use App\Models\AuthHistoryModel;
|
||||||
|
use App\Libraries\AuthLogout;
|
||||||
|
|
||||||
class LoginController extends BaseController
|
class LoginController extends BaseController
|
||||||
{
|
{
|
||||||
@ -54,25 +55,29 @@ class LoginController extends BaseController
|
|||||||
$path = getenv('cookie.Path');
|
$path = getenv('cookie.Path');
|
||||||
$domain = getenv('cookie.Domain');
|
$domain = getenv('cookie.Domain');
|
||||||
$https = getenv('ccokie.secure');
|
$https = getenv('ccokie.secure');
|
||||||
setcookie('session_data', json_encode($session_data), time() + 12 * 60 * 60, $path, $domain, $https, true);
|
// setcookie('session_data', json_encode($session_data), time() + 12 * 60 * 60, $path, $domain, $https, true);
|
||||||
set_session_data($session_data);
|
set_session_data($session_data);
|
||||||
|
|
||||||
|
// Bind session to device
|
||||||
|
set_session_data(['fingerprint' => hash('sha256',
|
||||||
|
($this->request->getUserAgent()->getAgentString() . '|' . ($this->request->getIPAddress()
|
||||||
|
)))]);
|
||||||
log_message('error', 'Set The UserId : `'. $user->id .'` in Session');
|
log_message('error', 'Set The UserId : `'. $user->id .'` in Session');
|
||||||
log_message('error', 'User Login Sucessfully');
|
log_message('error', 'User Login Sucessfully');
|
||||||
|
|
||||||
$this->getUserDeviceInfo($user->id, 'NhanceUser');
|
$this->getUserDeviceInfo($user->id, 'NhanceUser');
|
||||||
return redirect()->to(base_url('/dashboard/view'));
|
return AuthLogout::logout();
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
log_message('error', 'User Not Active');
|
log_message('error', 'User Not Active');
|
||||||
session()->setFlashdata('error', 'User Not Active');
|
session()->setFlashdata('error', 'User Not Active');
|
||||||
return redirect()->to(base_url('login'));
|
return AuthLogout::logout();
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
log_message('error', 'User Not Registered');
|
log_message('error', 'User Not Registered');
|
||||||
session()->setFlashdata('error', 'User Not Registered');
|
session()->setFlashdata('error', 'User Not Registered');
|
||||||
return redirect()->to(base_url('login'));
|
return AuthLogout::logout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,14 +99,16 @@ class LoginController extends BaseController
|
|||||||
// setcookie('session_data', '', time() - 3600, $path);
|
// setcookie('session_data', '', time() - 3600, $path);
|
||||||
// return redirect()->to(base_url('login'));
|
// return redirect()->to(base_url('login'));
|
||||||
|
|
||||||
$path = getenv('cookie.Path');
|
// $path = getenv('cookie.Path');
|
||||||
session()->destroy();
|
// session()->destroy();
|
||||||
// setcookie('session_data', '', time() - 3600, $path);
|
// // setcookie('session_data', '', time() - 3600, $path);
|
||||||
$path = getenv('cookie.Path');
|
// $path = getenv('cookie.Path');
|
||||||
$domain = getenv('cookie.Domain');
|
// $domain = getenv('cookie.Domain');
|
||||||
$https = getenv('cookie.secure');
|
// $https = getenv('cookie.secure');
|
||||||
setcookie('session_data',null, time() -3600, $path, $domain, $https, true);
|
// setcookie('session_data',null, time() -3600, $path, $domain, $https, true);
|
||||||
return redirect()->to(base_url('login'));
|
// return redirect()->to(base_url('login'));
|
||||||
|
|
||||||
|
return AuthLogout::logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,12 +5,29 @@ use CodeIgniter\Filters\FilterInterface;
|
|||||||
use CodeIgniter\HTTP\RequestInterface;
|
use CodeIgniter\HTTP\RequestInterface;
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
|
||||||
|
use App\Libraries\AuthLogout;
|
||||||
|
|
||||||
class AuthMVC implements FilterInterface
|
class AuthMVC implements FilterInterface
|
||||||
{
|
{
|
||||||
public function before(RequestInterface $request, $arguments = null)
|
public function before(RequestInterface $request, $arguments = null)
|
||||||
{
|
{
|
||||||
if (!check_session() && !check_cookie()) {
|
if (!check_session())
|
||||||
return redirect()->to(base_url('/login'));
|
{
|
||||||
|
return AuthLogout::logout();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (!check_cookie())
|
||||||
|
// {
|
||||||
|
// return AuthLogout::logout();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Fingerprint validation
|
||||||
|
$fp = hash('sha256',
|
||||||
|
$request->getUserAgent()->getAgentString() . '|' . $request->getIPAddress()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (session()->get('fingerprint') !== $fp) {
|
||||||
|
return AuthLogout::logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ if(!function_exists('check_cookie')){
|
|||||||
'userProfile' => $value['userProfile'],
|
'userProfile' => $value['userProfile'],
|
||||||
'user_team' => $user_team,
|
'user_team' => $user_team,
|
||||||
];
|
];
|
||||||
set_session_data($session_data);
|
// set_session_data($session_data);
|
||||||
// $this->getUserDeviceInfo($user->id, 'NhanceUser');
|
// $this->getUserDeviceInfo($user->id, 'NhanceUser');
|
||||||
// return redirect()->to(base_url('/dashboard/view'));
|
// return redirect()->to(base_url('/dashboard/view'));
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
42
app/Libraries/AuthLogout.php
Normal file
42
app/Libraries/AuthLogout.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Libraries;
|
||||||
|
|
||||||
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
|
||||||
|
class AuthLogout
|
||||||
|
{
|
||||||
|
public static function logout(): RedirectResponse
|
||||||
|
{
|
||||||
|
$session = session();
|
||||||
|
|
||||||
|
// Regenerate session ID (kills fixation)
|
||||||
|
$session->regenerate(true);
|
||||||
|
|
||||||
|
// Destroy CI session
|
||||||
|
$session->destroy();
|
||||||
|
|
||||||
|
// Kill PHP session cookie safely
|
||||||
|
if (ini_get('session.use_cookies')) {
|
||||||
|
$params = session_get_cookie_params();
|
||||||
|
|
||||||
|
setcookie(
|
||||||
|
session_name(), // DO NOT hardcode cookie name
|
||||||
|
'',
|
||||||
|
time() - 42000,
|
||||||
|
$params['path'],
|
||||||
|
$params['domain'],
|
||||||
|
$params['secure'],
|
||||||
|
$params['httponly']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
session_write_close();
|
||||||
|
|
||||||
|
// Redirect with anti-cache headers
|
||||||
|
return redirect()->to(base_url('login'))
|
||||||
|
->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
|
||||||
|
->setHeader('Pragma', 'no-cache')
|
||||||
|
->setHeader('Expires', 'Sat, 26 Jul 1997 05:00:00 GMT');
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user