hktr92/php-secrecy

Secrecy 可以尽可能安全地保护您的敏感数据不被泄露。

0.1.0 2022-11-05 23:42 UTC

This package is auto-updated.

Last update: 2024-09-06 03:33:49 UTC


README

Secrecy 可以尽可能安全地保护您的敏感数据不被泄露。

它为以下事件提供保护

  • 意外的 __toString() 转换,例如在记录日志时;
  • 禁止 clone 以保持数据在单个位置;
  • 防止在 \serialize()var_dump()var_export() 中泄露;
  • 拒绝来自 \unserialize() 的不安全输入;

免责声明

这个库 不提供 任何密码散列功能,也不提供任何类型的数据内存“加密”。它只是尽可能防止在各种模式和位置泄露敏感数据。

它不是100%无懈可击的,因为它需要一个单独的流来保存密码,这个密码可以随时访问。

用法

<?php

use Hktr92\Secrecy\Secrecy;
use Hktr92\Secrecy\SecrecyFactory;

/** @var Secrecy $password */
$password = SecrecyFactory::create("my super secret value")->unwrap();

echo "User password is $password"; // outputs "User password is <redacted>"

$pdo = new PDO(...);
$stmt = $pdo->prepare("INSERT INTO `users` SET `email` = ?, `password` = ?");
$stmt->execute(['user@example.com', password_hash($password->expose())]); // works as expected

主要注意事项: var_export()

Secrecy 使用流资源来隐藏秘密值,防止其通过 var_export() 泄露。

它的行为方式

这个库是从零开始构建的,旨在尽可能防止PHP的任何混乱行为。因此,该库 保证 在出错的情况下,您将收到一个有效的 string 或一个 Throwable

库仅在构造函数没有接收到有效的资源时才会崩溃(例如抛出 InvalidArgumentException)。