Browse Source

Fixes #14671: use `random_int()` instead of `mt_rand()` to generate cryptographically secure pseudo-random integers

tags/3.0.0-alpha1
Ruitang Du 7 years ago committed by Alexander Makarov
parent
commit
003d83c6e0
  1. 1
      framework/CHANGELOG.md
  2. 4
      framework/captcha/GdDriver.php
  3. 4
      framework/captcha/ImagickDriver.php
  4. 8
      framework/captcha/VerifyCodeGeneratorTrait.php
  5. 6
      tests/framework/web/UploadedFileTest.php

1
framework/CHANGELOG.md

@ -25,6 +25,7 @@ Yii Framework 2 Change Log
- Chg #12089: Behavior of `yii\grid\DataColumn::$filterInputOptions` changed when default value is overwritten (bvanleeuwen, cebe)
- Chg #13885: Removed APC support in ApcCache. APCu works as before (samdark)
- Chg #14178: Removed HHVM-specific code (samdark)
- Enh #14671: use `random_int()` instead of `mt_rand()` to generate cryptographically secure pseudo-random integers (yyxx9988)
2.0.13 under development
------------------------

4
framework/captcha/GdDriver.php

@ -64,8 +64,8 @@ class GdDriver extends Driver
$x = 10;
$y = round($this->height * 27 / 40);
for ($i = 0; $i < $length; ++$i) {
$fontSize = (int) (mt_rand(26, 32) * $scale * 0.8);
$angle = mt_rand(-10, 10);
$fontSize = (int) (random_int(26, 32) * $scale * 0.8);
$angle = random_int(-10, 10);
$letter = $code[$i];
$box = imagettftext($image, $fontSize, $angle, $x, $y, $foreColor, $this->fontFile, $letter);
$x = $box[2] + $this->offset;

4
framework/captcha/ImagickDriver.php

@ -54,9 +54,9 @@ class ImagickDriver extends Driver
for ($i = 0; $i < $length; ++$i) {
$draw = new \ImagickDraw();
$draw->setFont($this->fontFile);
$draw->setFontSize((int) (mt_rand(26, 32) * $scale * 0.8));
$draw->setFontSize((int) (random_int(26, 32) * $scale * 0.8));
$draw->setFillColor($foreColor);
$image->annotateImage($draw, $x, $y, mt_rand(-10, 10), $code[$i]);
$image->annotateImage($draw, $x, $y, random_int(-10, 10), $code[$i]);
$fontMetrics = $image->queryFontMetrics($draw, $code[$i]);
$x += (int) $fontMetrics['textWidth'] + $this->offset;
}

8
framework/captcha/VerifyCodeGeneratorTrait.php

@ -42,16 +42,16 @@ trait VerifyCodeGeneratorTrait
if ($this->maxLength > 20) {
$this->maxLength = 20;
}
$length = mt_rand($this->minLength, $this->maxLength);
$length = random_int($this->minLength, $this->maxLength);
$letters = 'bcdfghjklmnpqrstvwxyz';
$vowels = 'aeiou';
$code = '';
for ($i = 0; $i < $length; ++$i) {
if ($i % 2 && mt_rand(0, 10) > 2 || !($i % 2) && mt_rand(0, 10) > 9) {
$code .= $vowels[mt_rand(0, 4)];
if ($i % 2 && random_int(0, 10) > 2 || !($i % 2) && random_int(0, 10) > 9) {
$code .= $vowels[random_int(0, 4)];
} else {
$code .= $letters[mt_rand(0, 20)];
$code .= $letters[random_int(0, 20)];
}
}

6
tests/framework/web/UploadedFileTest.php

@ -27,10 +27,10 @@ class UploadedFileTest extends TestCase
private function generateFakeFileData()
{
return [
'name' => md5(mt_rand()),
'tmp_name' => md5(mt_rand()),
'name' => md5(random_int()),
'tmp_name' => md5(random_int()),
'type' => 'image/jpeg',
'size' => mt_rand(1000, 10000),
'size' => random_int(1000, 10000),
'error' => 0,
];
}

Loading…
Cancel
Save