Skip to content

Commit 2655078

Browse files
Merge branch '4.4' into 5.2
* 4.4: [Console] minor fix [Validator] Avoid triggering the autoloader for user-input values Hardening Security - Unserialize DumpDataCollector [HttpClient] remove using $http_response_header [Security] Handle properly 'auto' option for remember me cookie security
2 parents e6fb8ac + 607dcdb commit 2655078

File tree

5 files changed

+76
-2
lines changed

5 files changed

+76
-2
lines changed

DependencyInjection/Security/Factory/RememberMeFactory.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public function createAuthenticator(ContainerBuilder $container, string $firewal
108108
$container
109109
->setDefinition($authenticatorId, new ChildDefinition('security.authenticator.remember_me'))
110110
->replaceArgument(0, new Reference($rememberMeServicesId))
111-
->replaceArgument(3, array_intersect_key($config, $this->options))
111+
->replaceArgument(3, $container->getDefinition($rememberMeServicesId)->getArgument(3))
112112
;
113113

114114
foreach ($container->findTaggedServiceIds('security.remember_me_aware') as $serviceId => $attributes) {
@@ -201,7 +201,12 @@ private function createRememberMeServices(ContainerBuilder $container, string $i
201201
}
202202

203203
// remember-me options
204-
$rememberMeServices->replaceArgument(3, array_intersect_key($config, $this->options));
204+
$mergedOptions = array_intersect_key($config, $this->options);
205+
if ('auto' === $mergedOptions['secure']) {
206+
$mergedOptions['secure'] = null;
207+
}
208+
209+
$rememberMeServices->replaceArgument(3, $mergedOptions);
205210

206211
if ($config['user_providers']) {
207212
$userProviders = [];
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Symfony\Bundle\SecurityBundle\Tests\Functional;
4+
5+
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
6+
7+
class RememberMeCookieTest extends AbstractWebTestCase
8+
{
9+
/** @dataProvider getSessionRememberMeSecureCookieFlagAutoHttpsMap */
10+
public function testSessionRememberMeSecureCookieFlagAuto($https, $expectedSecureFlag)
11+
{
12+
$client = $this->createClient(['test_case' => 'RememberMeCookie', 'root_config' => 'config.yml']);
13+
14+
$client->request('POST', '/login', [
15+
'_username' => 'test',
16+
'_password' => 'test',
17+
], [], [
18+
'HTTPS' => (int) $https,
19+
]);
20+
21+
$cookies = $client->getResponse()->headers->getCookies(ResponseHeaderBag::COOKIES_ARRAY);
22+
23+
$this->assertEquals($expectedSecureFlag, $cookies['']['/']['REMEMBERME']->isSecure());
24+
}
25+
26+
public function getSessionRememberMeSecureCookieFlagAutoHttpsMap()
27+
{
28+
return [
29+
[true, true],
30+
[false, false],
31+
];
32+
}
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
4+
use Symfony\Bundle\SecurityBundle\SecurityBundle;
5+
6+
return [
7+
new FrameworkBundle(),
8+
new SecurityBundle(),
9+
];
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
imports:
2+
- { resource: ./../config/framework.yml }
3+
4+
security:
5+
encoders:
6+
Symfony\Component\Security\Core\User\User: plaintext
7+
8+
providers:
9+
in_memory:
10+
memory:
11+
users:
12+
test: { password: test, roles: [ROLE_USER] }
13+
14+
firewalls:
15+
default:
16+
form_login:
17+
check_path: login
18+
remember_me: true
19+
require_previous_session: false
20+
remember_me:
21+
always_remember_me: true
22+
secret: key
23+
secure: auto
24+
logout: ~
25+
anonymous: ~
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
login:
2+
path: /login

0 commit comments

Comments
 (0)