felixsand / phpsst
一个用于更安全地分发(一次性)密码/机密的 PHP 库
v2.0.0
2022-08-07 20:26 UTC
Requires
- php: ^8.1
- ext-json: *
- illuminate/encryption: ~9
Requires (Dev)
- phpunit/phpunit: ~9
Suggests
- ext-sqlite3: Required when using the SQLite storage option
- predis/predis: Required when using the Redis storage option
README
一个用于更安全地分发(一次性)密码/机密的 PHP 库
安装
将包添加到您的 composer.json
中的依赖项
$ composer require felixsand/phpsst
用法
<?php use PhPsst\PhPsst; use PhPsst\Storage\FileStorage; $phPsst = new PhPsst(new FileStorage('data/passwords', 10)); $secret = $phPsst->store('my secret password'); echo "Retrieve the password from: https://example.net/get-password?secret={$secret}";
<?php use PhPsst\PhPsst; use PhPsst\Storage\FileStorage; $phPsst = new PhPsst(new FileStorage('data/passwords', 10)); $decryptedPassword = $phPsst->retrieve($_GET['secret']); echo "The password stored: {$decryptedPassword}";
存储类
FileStorage
存储类中最基本的是 FileStorage。它通常也是最不安全的,如果你存储很多密码,由于垃圾收集器非常原始,可能会出现性能问题。然而,它是尝试库的最简单方法,并且在开发期间非常有用。构造函数参数 $gcProbability 是一个从 0 到正无穷的值,其中 0 禁用 GC;1 表示每次文件写入时都会运行;10 表示有 10% 的概率运行;等等。不建议关闭它。
$phPsst = new PhPsst(new FileStorage('data/passwords', 10));
RedisStorage
推荐的生产存储类是 RedisStorage。即使在重负载下也有很好的性能,并且由于它可以自动删除过期的密码,因此比其他选项更安全。需要注意的是,如果你没有审查 Redis 配置,它可能会在项的 TTL 过期之前(如果内存限制达到)清除条目,并且项目将只持续服务器运行的时间。这在某些情况下可能是希望的性质,但在设置解决方案时需要了解这一点。
$redis = new \Predis\Client(array( 'host' => '10.0.0.1', 'port' => 6380, )); $phPsst = new PhPsst(new RedisStorage($redis));
SqLiteStorage
如果你没有访问 Redis,另一个适合生产使用的存储引擎是 SqLiteStorage。它不如 RedisStorage 安全,主要是因为它依赖于垃圾收集器;以及 SqLite 数据库文件可能包含在备份中等。它也不适合没有访问共享文件系统的多个 web 服务器配置。构造函数参数 $gcProbability 与 FileStorage 相同。
$db = new \SQLite3('path/to/sqlite.db'); $phPsst = new PhPsst(new SqLiteStorage($db, 10));
要求
- PHP 8.1 或更高版本。
- Redis(用于 Redis 存储)
演示
- Docker
docker run -p 80:80 felixsand/phpsst
- 查看: github.com/felixsand/phpsst-demo
作者
Felix Sandström http://github.com/felixsand
特别感谢
- Andreas http://github.com/jandreasn 进行同行评审
- Chris Wolf https://github.com/crslp 将库提升到 PHP 8.1
许可
在 MIT 许可证下授权 - 有关详细信息,请参阅 LICENSE
文件。