Issues (3)

SessionConfiguration.php (1 issue)

1
<?php
2
3
/*
4
 * This file is part of the Koded package.
5
 *
6
 * (c) Mihail Binev <[email protected]>
7
 *
8
 * Please view the LICENSE distributed with this source code
9
 * for the full copyright and license information.
10
 *
11
 */
12
13
namespace Koded\Session;
14
15
use Koded\Stdlib\{Config, Immutable};
16
use Koded\Stdlib\Interfaces\ConfigurationFactory;
17
18
19
class SessionConfiguration extends Config
20
{
21
22 68
    public function __construct(ConfigurationFactory $settings)
23
    {
24
        $this
25 68
            ->set('name', 'session')
26 68
            ->import($settings->get('session', []))
27 68
            ->import([
28 68
                'use_strict_mode'  => '1', // enable to prevent session fixation
29
                'use_trans_sid'    => '0', // disable to prevent session fixation and hijacking
30
                'use_only_cookies' => '1', // disable session identifiers in the URLs
31
                'cache_limiter'    => '',  // disable response headers
32
                'referer_check'    => '',  // disable it, not a safe implementation (with substr() check)
33
            ]);
34
35 68
        if ($this->get('expire_at_browser_close')) {
36 1
            ini_set('session.cookie_lifetime', 0);
37 1
            $this->set('cookie_lifetime', 0);
38
        }
39
40 68
        foreach ($this as $name => $value) {
41 68
            @ini_set('session.' . $name, $value);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for ini_set(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled  annotation

41
            /** @scrutinizer ignore-unhandled */ @ini_set('session.' . $name, $value);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
42
        }
43 68
    }
44
45 67
    public function handler(): string
46
    {
47 67
        return $this->get('save_handler', 'files');
48
    }
49
50
    /**
51
     * Session directives for session_start() function.
52
     *
53
     * @return array
54
     */
55 65
    public function sessionParameters(): array
56
    {
57 65
        return (new Immutable($this->filter(ini_get_all('session', false), 'session.', false)))
58 65
            ->extract([
59 65
                'cache_expire',
60
                'cache_limiter',
61
                'gc_maxlifetime',
62
                'name',
63
                'referer_check',
64
                'serialize_handler',
65
                'sid_bits_per_character',
66
                'sid_length',
67
                'use_cookies',
68
                'use_only_cookies',
69
                'use_strict_mode',
70
                'use_trans_sid',
71
            ]);
72
    }
73
}
74