Skip to content

Commit 2958114

Browse files
authored
Merge pull request #355 from martijnc/feature/deprecate-sha256-default
Deprecate the default signed cookie algorithm
2 parents 7de9ce4 + 1a35093 commit 2958114

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

Diff for: src/DependencyInjection/Configuration.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ private function getSignedCookiesNode(): ArrayNodeDefinition
253253
->defaultValue(['*'])
254254
->end()
255255
->scalarNode('secret')->defaultValue('%kernel.secret%')->end()
256-
->scalarNode('hash_algo')->defaultValue('sha256')->end()
256+
->scalarNode('hash_algo')->end()
257257
->scalarNode('legacy_hash_algo')
258258
->defaultNull()
259259
->info('Fallback algorithm to allow for frictionless hash algorithm upgrades. Use with caution and as a temporary measure as it allows for downgrade attacks.')

Diff for: src/DependencyInjection/NelmioSecurityExtension.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,14 @@ public function load(array $configs, ContainerBuilder $container): void
3535
$loader->load('signed_cookie.php');
3636
$container->setParameter('nelmio_security.signed_cookie.names', $config['signed_cookie']['names']);
3737
$container->setParameter('nelmio_security.signer.secret', $config['signed_cookie']['secret']);
38-
$container->setParameter('nelmio_security.signer.hash_algo', $config['signed_cookie']['hash_algo']);
38+
39+
if (isset($config['signed_cookie']['hash_algo'])) {
40+
$container->setParameter('nelmio_security.signer.hash_algo', $config['signed_cookie']['hash_algo']);
41+
} else {
42+
trigger_deprecation('nelmio/security-bundle', '3.4.0', 'The default value for `signed_cookie.hash_algo` is deprecated and will change in 4.0. You should configure an algorithm explicitly.');
43+
$container->setParameter('nelmio_security.signer.hash_algo', 'sha256');
44+
}
45+
3946
$container->setParameter('nelmio_security.signer.legacy_hash_algo', $config['signed_cookie']['legacy_hash_algo']);
4047
$container->setParameter('nelmio_security.signer.separator', $config['signed_cookie']['separator']);
4148
}

Diff for: tests/DependencyInjection/NelmioSecurityExtensionTest.php

+22
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@
2222
use Nelmio\SecurityBundle\ExternalRedirect\AllowListBasedTargetValidator;
2323
use Nelmio\SecurityBundle\Signer;
2424
use PHPUnit\Framework\TestCase;
25+
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
2526
use Symfony\Component\DependencyInjection\ContainerBuilder;
2627

2728
final class NelmioSecurityExtensionTest extends TestCase
2829
{
30+
use ExpectDeprecationTrait {
31+
ExpectDeprecationTrait::expectDeprecation as bridgeExpectDeprecation;
32+
}
33+
2934
private NelmioSecurityExtension $extension;
3035

3136
protected function setUp(): void
@@ -58,6 +63,23 @@ public function testLoadSignedCookie(): void
5863
$this->assertServiceIdClass($container, 'nelmio_security.signer', Signer::class);
5964
}
6065

66+
/**
67+
* @group legacy
68+
*/
69+
public function testDeprecatedSignedCookieDefaultAlgorithm(): void
70+
{
71+
$this->bridgeExpectDeprecation('Since nelmio/security-bundle 3.4.0: The default value for `signed_cookie.hash_algo` is deprecated and will change in 4.0. You should configure an algorithm explicitly.');
72+
73+
$container = new ContainerBuilder();
74+
$this->extension->load([
75+
[
76+
'signed_cookie' => [],
77+
],
78+
], $container);
79+
80+
$this->assertContainerWithParameterValue($container, 'nelmio_security.signer.hash_algo', 'sha256');
81+
}
82+
6183
public function testLoadClickJacking(): void
6284
{
6385
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)