Skip to content

Commit ec6e6a9

Browse files
authored
Merge pull request #6408 from kenjis/fix-SecurityException-HTTP-status
fix: SecurityException's HTTP status code
2 parents e035c1f + d6ecb56 commit ec6e6a9

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

system/Security/Exceptions/SecurityException.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
namespace CodeIgniter\Security\Exceptions;
1313

1414
use CodeIgniter\Exceptions\FrameworkException;
15+
use CodeIgniter\Exceptions\HTTPExceptionInterface;
1516

16-
class SecurityException extends FrameworkException
17+
class SecurityException extends FrameworkException implements HTTPExceptionInterface
1718
{
1819
public static function forDisallowedAction()
1920
{

tests/system/Filters/CSRFTest.php

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,40 @@ protected function setUp(): void
3131
$this->config = new \Config\Filters();
3232
}
3333

34-
public function testNormal()
34+
public function testDoNotCheckCliRequest()
3535
{
3636
$this->config->globals = [
3737
'before' => ['csrf'],
3838
'after' => [],
3939
];
4040

41-
$this->request = Services::request(null, false);
41+
$this->request = Services::clirequest(null, false);
4242
$this->response = Services::response();
4343

4444
$filters = new Filters($this->config, $this->request, $this->response);
4545
$uri = 'admin/foo/bar';
4646

47-
// we expect CSRF requests to be ignored in CLI
48-
$expected = $this->request;
49-
$request = $filters->run($uri, 'before');
50-
$this->assertSame($expected, $request);
47+
$request = $filters->run($uri, 'before');
48+
49+
$this->assertSame($this->request, $request);
50+
}
51+
52+
public function testPassGetRequest()
53+
{
54+
$this->config->globals = [
55+
'before' => ['csrf'],
56+
'after' => [],
57+
];
58+
59+
$this->request = Services::incomingrequest(null, false);
60+
$this->response = Services::response();
61+
62+
$filters = new Filters($this->config, $this->request, $this->response);
63+
$uri = 'admin/foo/bar';
64+
65+
$request = $filters->run($uri, 'before');
66+
67+
// GET request is not protected, so no SecurityException will be thrown.
68+
$this->assertSame($this->request, $request);
5169
}
5270
}

0 commit comments

Comments
 (0)