Passed
Push — master ( 3dce90...ce9fec )
by jelmer
06:37 queued 10s
created

ResponseSecurer::onKernelResponse()   B

Complexity

Conditions 7
Paths 18

Size

Total Lines 40
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 7.0061

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 7
eloc 26
c 4
b 0
f 0
nc 18
nop 1
dl 0
loc 40
ccs 19
cts 20
cp 0.95
crap 7.0061
rs 8.5706
1
<?php
2
3
namespace Common\EventListener;
4
5
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
6
7
class ResponseSecurer
8
{
9
    /**
10
     * Add some headers to the response to make our application more secure
11
     * see https://www.owasp.org/index.php/List_of_useful_HTTP_headers
12
     *
13
     * @param FilterResponseEvent $event
14
     */
15 5
    public function onKernelResponse(FilterResponseEvent $event): void
16
    {
17
        $cacheControl = [
18 5
            'max-age=0',
19
            'must-revalidate',
20
            'private',
21
            'no-cache',
22
        ];
23
24 5
        if (defined('APPLICATION') && APPLICATION === 'Backend') {
0 ignored issues
show
introduced by
The condition Common\EventListener\APPLICATION === 'Backend' is always false.
Loading history...
25
            $cacheControl[] = 'no-store';
26
        }
27
28
        $headers = [
29 5
            'Cache-Control' => implode(', ', $cacheControl),
30 5
            'X-Frame-Options' => 'deny',
31 5
            'Expires' =>  '0',
32 5
            'Pragma' => 'no-cache',
33 5
            'referrer' => 'strict-origin-when-cross-origin',
34 5
            'Referrer-Policy' => 'strict-origin-when-cross-origin',
35 5
            'X-XSS-Protection' => '1; mode=block',
36 5
            'X-Content-Type-Options' => 'nosniff',
37
        ];
38
39
40 5
        $responseHeaders = $event->getResponse()->headers;
41 5
        foreach ($headers as $header => $value) {
42 5
            if (!$responseHeaders->has($header)) {
43 5
                $responseHeaders->set($header, $value);
44
            }
45
        }
46
47
        // Don't leak server config
48
        $blockedHeaders = [
49 5
            'x-powered-by',
50
            'Server',
51
        ];
52 5
        foreach ($blockedHeaders as $blockedHeader) {
53 5
            if ($responseHeaders->has($blockedHeader)) {
54 5
                $responseHeaders->remove($blockedHeader);
55
            }
56
        }
57 5
    }
58
}
59