intelogie/random_compat
Composer 安装命令:
composer require intelogie/random_compat
包简介
PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
关键字:
README 文档
README
PHP 5.x polyfill for random_bytes() and random_int() created and maintained
by Paragon Initiative Enterprises.
Although this library should function in earlier versions of PHP, we will only consider issues relevant to supported PHP versions. If you are using an unsupported version of PHP, please upgrade as soon as possible.
Important
Although this library has been examined by some security experts in the PHP community, there will always be a chance that we overlooked something. Please ask your favorite trusted hackers to hammer it for implementation errors and bugs before even thinking about deploying it in production.
Do not use the master branch, use a stable release.
For the background of this library, please refer to our blog post on Generating Random Integers and Strings in PHP.
Usability Notice
If PHP cannot safely generate random data, this library will throw an Exception.
It will never fall back to insecure random data. If this keeps happening, upgrade
to a newer version of PHP immediately.
Installing
With Composer:
composer require paragonie/random_compat
Signed PHP Archive:
As of version 1.2.0, we also ship an ECDSA-signed PHP Archive with each stable release on Github.
- Download the
.phar,.phar.pubkey, and.phar.pubkey.ascfiles. - (Recommended but not required) Verify the PGP signature of
.phar.pubkey(contained within the.ascfile) using the PGP public key for Paragon Initiative Enterprises. - Extract both
.pharand.phar.pubkeyfiles to the same directory. require_once "/path/to/random_compat.phar";- When a new version is released, you only need to replace the
.pharfile; the.pubkeywill not change (unless our signing key is ever compromised).
Manual Installation:
- Download a stable release.
- Extract the files into your project.
require_once "/path/to/random_compat/lib/random.php";
Usage
This library exposes the CSPRNG functions added in PHP 7 for use in PHP 5 projects. Their behavior should be identical.
Generate a string of random bytes
try { $string = random_bytes(32); } catch (TypeError $e) { // Well, it's an integer, so this IS unexpected. die("An unexpected error has occurred"); } catch (Error $e) { // This is also unexpected because 32 is a reasonable integer. die("An unexpected error has occurred"); } catch (Exception $e) { // If you get this message, the CSPRNG failed hard. die("Could not generate a random string. Is our OS secure?"); } var_dump(bin2hex($string)); // string(64) "5787c41ae124b3b9363b7825104f8bc8cf27c4c3036573e5f0d4a91ad2eeac6f"
Generate a random integer between two given integers (inclusive)
try { $int = random_int(0, 255); } catch (TypeError $e) { // Well, it's an integer, so this IS unexpected. die("An unexpected error has occurred"); } catch (Error $e) { // This is also unexpected because 0 and 255 are both reasonable integers. die("An unexpected error has occurred"); } catch (Exception $e) { // If you get this message, the CSPRNG failed hard. die("Could not generate a random int. Is our OS secure?"); } var_dump($int); // int(47)
Exception handling
When handling exceptions and errors you must account for differences between PHP 5 and PHP7.
The differences:
- Catching
Errorworks, so long as it is caught beforeException. - Catching
Exceptionhas different behavior, without previously catchingError. - There is no portable way to catch all errors/exceptions.
Our recommendation
Always catch Error before Exception.
Example
try { return random_int(1, $userInput); } catch (TypeError $e) { // This is okay, so long as `Error` is caught before `Exception`. throw new Exception('Please enter a number!'); } catch (Error $e) { // This is required, if you do not need to do anything just rethrow. throw $e; } catch (Exception $e) { // This is optional and maybe omitted if you do not want to handle errors // during generation. throw new InternalServerErrorException( 'Oops, our server is bust and cannot generate any random data.', 500, $e ); }
Troubleshooting
Exception: "Could not gather sufficient random data"
If an Exception is thrown, then your operating system is not secure.
- If you're on Windows, make sure you enable mcrypt.
- If you're on any other OS, make sure
/dev/urandomis readable.- FreeBSD jails need to expose
/dev/urandomfrom the host OS - If you use
open_basedir, make sure/dev/urandomis allowed
- FreeBSD jails need to expose
This library does not (and will not accept any patches to) fall back to an insecure random number generator.
Contributors
This project would not be anywhere near as excellent as it is today if it weren't for the contributions of the following individuals:
- @AndrewCarterUK (Andrew Carter)
- @asgrim (James Titcumb)
- @bcremer (Benjamin Cremer)
- @CodesInChaos (Christian Winnerlein)
- @chriscct7 (Chris Christoff)
- @cs278 (Chris Smith)
- @cweagans (Cameron Eagans)
- @dd32 (Dion Hulse)
- @geggleto (Glenn Eggleton)
- @ircmaxell (Anthony Ferrara)
- @jedisct1 (Frank Denis)
- @juliangut (Julián Gutiérrez)
- @kelunik (Niklas Keller)
- @lt (Leigh)
- @MasonM (Mason Malone)
- @mmeyer2k (Michael M)
- @narfbg (Andrey Andreev)
- @nicolas-grekas (Nicolas Grekas)
- @oittaa
- @oucil (Kevin Farley)
- @redragonx (Stephen Chavez)
- @rchouinard (Ryan Chouinard)
- @SammyK (Sammy Kaye Powers)
- @scottchiefbaker (Scott Baker)
- @skyosev (Stoyan Kyosev)
- @stof (Christophe Coevoet)
- @teohhanhui (Teoh Han Hui)
- @tom-- (Tom Worster)
- @tsyr2ko
- @trowski (Aaron Piotrowski)
- @twistor (Chris Lepannen)
- @voku (Lars Moelleken)
- @xabbuh (Christian Flothmann)
intelogie/random_compat 适用场景与选型建议
intelogie/random_compat 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 148 次下载、GitHub Stars 达 0, 最近一次更新时间为 2016 年 05 月 31 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「random」 「csprng」 「pseudorandom」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 intelogie/random_compat 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 intelogie/random_compat 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 intelogie/random_compat 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
The most convenient way to securely generate anything random in PHP
CubicleSoft PHP Software Development Libraries for Composer
Faker Japanese is a Faker provider that generates fake Japanese related data for you.
Gambling Algorithms for Certification.
Reusable utilities library for Lacus Solutions' packages (type description, HTML escaping, random sequences)
统计信息
- 总下载量: 148
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 14
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-05-31