felixsand/phpsst

一个用于更安全地分发(一次性)密码/机密的 PHP 库

v2.0.0 2022-08-07 20:26 UTC

This package is auto-updated.

Last update: 2024-09-08 01:02:22 UTC


README

Latest Stable Version Build Status License Scrutinizer Code Quality Code Coverage

一个用于更安全地分发(一次性)密码/机密的 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 存储)

演示

作者

Felix Sandström http://github.com/felixsand

特别感谢

许可

在 MIT 许可证下授权 - 有关详细信息,请参阅 LICENSE 文件。