Skip to content
This repository was archived by the owner on Jan 5, 2026. It is now read-only.

Commit 64ccf2f

Browse files
authored
Merge pull request #41 from modulusphp/fix/csrf-token-bug
Fix/csrf token bug
2 parents 58bc48d + b67c25e commit 64ccf2f

File tree

3 files changed

+37
-17
lines changed

3 files changed

+37
-17
lines changed

CSRF.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ class CSRF
1414
*/
1515
public static function generate()
1616
{
17-
$_SESSION['_cksal'] = self::genTimeStamp();
18-
$_SESSION['_saini'] = bin2hex(random_bytes(30));
17+
$_SESSION['_session_stamp'] = self::genTimeStamp();
18+
$_SESSION['_session_token'] = bin2hex(random_bytes(30));
1919

20-
return $_SESSION['_saini'];
20+
return $_SESSION['_session_token'];
2121
}
2222

2323
/**

Middleware/VerifyCsrfToken.php

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class VerifyCsrfToken
3333
* Handle middleware
3434
*
3535
* @param Request $request
36-
* @param mixed $continue
36+
* @param bool $continue
37+
* @throws TokenMismatchException
3738
* @return bool
3839
*/
3940
public function handle($request, $continue) : bool
@@ -73,27 +74,46 @@ protected function isReading($request) : bool
7374
*/
7475
protected function shouldIgnore($request) : bool
7576
{
76-
return in_array($request->path(), $this->createUrl($request, 'except')) ? true : false;
77+
/** create url */
78+
$this->createUrl(
79+
$request,
80+
'except'
81+
);
82+
83+
return in_array($request->path(), $this->except) ? true : false;
7784
}
7885

7986
/**
80-
* Check if token is valid
87+
* Check if token matches
8188
*
8289
* @param \Modulus\Http\Request $request
8390
* @return bool
8491
*/
8592
protected function tokenMatches($request) : bool
8693
{
87-
if (!isset( $_SESSION['_saini']) || !$_SESSION['_saini']) return false;
94+
if (!isset($_SESSION['_session_token']) || !$_SESSION['_session_token']) return false;
8895

89-
$csrfToken = $request->has('csrf_token') ? $request->input('csrf_token') : ($request->headers->has('X-CSRF-TOKEN') ? $request->header('X-CSRF-TOKEN') : null);
90-
$sessionToken = $_SESSION['_saini'];
96+
return hash_equals($_SESSION['_session_token'], $this->getCsrfToken($request)) ? true : false;
97+
}
9198

92-
if (!hash_equals($sessionToken, $csrfToken)) {
93-
return false;
99+
/**
100+
* Get csrf token
101+
*
102+
* @param mixed $request
103+
*/
104+
private function getCsrfToken($request) : string
105+
{
106+
if ($request->has('csrf_token')) {
107+
return $request->input('csrf_token');
94108
}
95109

96-
return true;
110+
foreach($request->headers() as $header => $value) {
111+
if (strtoupper($header) == 'X-CSRF-TOKEN') {
112+
return $value;
113+
}
114+
}
115+
116+
return '';
97117
}
98118

99119
/**
@@ -104,13 +124,13 @@ protected function tokenMatches($request) : bool
104124
*/
105125
protected function hasNotExpired($request) : bool
106126
{
107-
if (!isset($_SESSION['_cksal'])) return false;
127+
if (!isset($_SESSION['_session_stamp'])) return false;
108128

109129
$this->createUrl($request, 'expire');
110130

111131
if (in_array($request->path(), $this->canExpire)) return true;
112132

113-
$time = $_SESSION['_cksal'];
133+
$time = $_SESSION['_session_stamp'];
114134
$time = base64_decode($time);
115135

116136
$expire = config('auth.expire.session_token');
@@ -126,8 +146,8 @@ protected function hasNotExpired($request) : bool
126146
/**
127147
* Create url
128148
*
129-
* @param \Modulus\Http\Request $request
130-
* @param string $type
149+
* @param \Modulus\Http\Request $request
150+
* @param string $type
131151
* @return void
132152
*/
133153
private function createUrl($request, string $type)

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "modulusphp/http",
33
"description": "Http component for Modulus",
4-
"version": "1.9.6.4",
4+
"version": "1.9.6.5",
55
"license": "MIT",
66
"type": "package",
77
"authors": [{

0 commit comments

Comments
 (0)