Skip to content

Commit b6246f8

Browse files
committed
Use random_bytes to generate tokens
1 parent ba6f3d5 commit b6246f8

File tree

3 files changed

+6
-46
lines changed

3 files changed

+6
-46
lines changed

Resources/config/util.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
<argument type="service" id="fos_user.user_manager" />
1313
</service>
1414

15-
<service id="fos_user.util.token_generator.default" class="FOS\UserBundle\Util\TokenGenerator" public="false">
16-
<argument type="service" id="logger" on-invalid="ignore" />
17-
</service>
15+
<service id="fos_user.util.token_generator.default" class="FOS\UserBundle\Util\TokenGenerator" public="false" />
1816

1917
</services>
2018

Util/TokenGenerator.php

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,52 +11,13 @@
1111

1212
namespace FOS\UserBundle\Util;
1313

14-
use Symfony\Component\HttpKernel\Log\LoggerInterface;
15-
1614
class TokenGenerator implements TokenGeneratorInterface
1715
{
18-
private $logger;
19-
private $useOpenSsl;
20-
21-
public function __construct(LoggerInterface $logger = null)
22-
{
23-
$this->logger = $logger;
24-
25-
// determine whether to use OpenSSL
26-
if (defined('PHP_WINDOWS_VERSION_BUILD') && version_compare(PHP_VERSION, '5.3.4', '<')) {
27-
$this->useOpenSsl = false;
28-
} elseif (!function_exists('openssl_random_pseudo_bytes')) {
29-
if (null !== $this->logger) {
30-
$this->logger->notice('It is recommended that you enable the "openssl" extension for random number generation.');
31-
}
32-
$this->useOpenSsl = false;
33-
} else {
34-
$this->useOpenSsl = true;
35-
}
36-
}
37-
16+
/**
17+
* {@inheritdoc}
18+
*/
3819
public function generateToken()
3920
{
40-
return rtrim(strtr(base64_encode($this->getRandomNumber()), '+/', '-_'), '=');
41-
}
42-
43-
private function getRandomNumber()
44-
{
45-
$nbBytes = 32;
46-
47-
// try OpenSSL
48-
if ($this->useOpenSsl) {
49-
$bytes = openssl_random_pseudo_bytes($nbBytes, $strong);
50-
51-
if (false !== $bytes && true === $strong) {
52-
return $bytes;
53-
}
54-
55-
if (null !== $this->logger) {
56-
$this->logger->info('OpenSSL did not produce a secure random number.');
57-
}
58-
}
59-
60-
return hash('sha256', uniqid(mt_rand(), true), true);
21+
return rtrim(strtr(base64_encode(random_bytes(32)), '+/', '-_'), '=');
6122
}
6223
}

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
],
2222
"require": {
2323
"php": ">=5.3.2",
24+
"paragonie/random_compat": "^1 || ^2",
2425
"symfony/framework-bundle": "~2.3",
2526
"symfony/security-bundle": "~2.3"
2627
},

0 commit comments

Comments
 (0)