nzo / url-encryptor-bundle
NzoUrlEncryptorBundle 是一个用于在 Web 应用程序中加密和解密数据及变量的 Symfony Bundle,或通过 URL 传递,以提供更安全的方案。它还能防止用户读取和修改通过 URL 发送的敏感数据。
v6.3.3
2024-09-10 12:26 UTC
Requires
- php: >=7.1.3
- ext-openssl: *
- doctrine/annotations: ^1.7|^2.0
- symfony/framework-bundle: ^4.4|^5.0|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0|^9.0
- dev-master
- v6.3.3
- v6.3.2
- v6.3.1
- v6.3.0
- v6.2.9
- v6.2.8
- v6.2.7
- v6.2.6
- v6.2.5
- v6.2.4
- v6.2.3
- v6.2.2
- v6.2.1
- v6.2.0
- v6.1.1
- v6.1.0
- v6.0.1
- v6.0.0
- v5.2.0
- v5.1.0
- v5.0.1
- v5.0.0
- v4.5.0
- v4.4.0
- v4.3.2
- v4.3.1
- v4.3.0
- v4.2.3
- v4.2.2
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0
- 3.1
- 3.0
- 2.1
- 2.0
- 1.9
- 1.8
- 1.7
- 1.6
- 1.5
- 1.4
- 1.3
- 1.2
- 1.1
- 1.0
- dev-fix-deprecation
This package is auto-updated.
Last update: 2024-09-10 12:28:11 UTC
README
NzoUrlEncryptorBundle 是一个用于在 Web 应用程序中加密和解密数据及变量的 Symfony Bundle,或通过 URL
传递,以提供更安全的方案。同时,它还可以防止用户读取和修改通过 URL
发送的敏感数据。
版本 (^6.0) 与 Symfony >= 4.4 兼容
特性包括
- URL 数据和参数加密
- URL 数据和参数解密
- 数据加密和解密
- 通过 Twig 方便访问
- 灵活的配置
- 使用 OpenSSL 扩展
默认情况下,此 Bundle 使用 aes-256-ctr 算法。
CTR 模式(没有额外的认证步骤)是可变形的,这意味着可以更改密文的含义。如果明文可猜测,则可能导致 IDOR。
为了获得更安全的输出,您必须配置 Bundle 使用一个 唯一且随机的 IV(《random_pseudo_bytes: TRUE》)。
安装
通过 Composer
安装 Bundle
$ composer require nzo/url-encryptor-bundle
在 config/bundles.php 中注册 Bundle(不使用 Flex)
// config/bundles.php return [ // ... Nzo\UrlEncryptorBundle\NzoUrlEncryptorBundle::class => ['all' => true], ];
配置 Bundle
# config/packages/nzo_encryptor.yaml nzo_encryptor: secret_key: Your_Secret_Encryption_Key # Required, max length of 100 characters. secret_iv: Your_Secret_Iv # Required only if "random_pseudo_bytes" is FALSE. Max length of 100 characters. cipher_algorithm: # optional, default: 'aes-256-ctr' base64_encode: # optional, default: TRUE format_base64_output: # optional, default: TRUE, used only when 'base64_encode' is set to TRUE random_pseudo_bytes: # optional, default: TRUE (generate a random encrypted text output each time => MORE SECURE !)
* 要每次生成相同的密文:random_pseudo_bytes: FALSE
(不安全)
* 要每次生成不同的密文:random_pseudo_bytes: TRUE
(安全)
使用方法
在 twig 模板中
使用 twig 扩展过滤器或函数来 加密
或 解密
您的数据
// Filters: # Encryption: <a href="{{path('my-route', {'id': myId | nzo_encrypt } )}}"> My link </a> {{myVar | nzo_encrypt }} # Decryption: <a href="{{path('my-route', {'id': myId | nzo_decrypt } )}}"> My link </a> {{myVar | nzo_decrypt }} // Functions: # Encryption: <a href="{{path('my-path-in-the-routing', {'id': nzo_encrypt('myId') } )}}"> My link </a> {{ nzo_encrypt(myVar) }} # Decryption: <a href="{{path('my-path-in-the-routing', {'id': nzo_decrypt('myId') } )}}"> My link </a> {{ nzo_decrypt(myVar) }}
在控制器中使用注解服务
使用注解服务 解密
/ 加密
您想要的任何参数,通过使用 ParamDecryptor
/ ParamEncryptor
注解服务和在其中指定所有要解密/加密的参数。
use Nzo\UrlEncryptorBundle\Annotations\ParamDecryptor; use Nzo\UrlEncryptorBundle\Annotations\ParamEncryptor; class MyController { /** * @ParamDecryptor({"id", "foo"}) OR #[ParamDecryptor(["id", "foo"])] */ public function decryptionAction($id, $foo) { // no need to use the decryption service here as the parameters are already decrypted by the annotation service. //... } /** * @ParamEncryptor({"id", "foo"}) OR #[ParamEncryptor(["id", "foo"])] */ public function encryptionAction($id, $foo) { // no need to use the encryption service here as the parameters are already encrypted by the annotation service. //... } }
使用自动注入
use Nzo\UrlEncryptorBundle\Encryptor\Encryptor; class MyController { private $encryptor; public function __construct(Encryptor $encryptor) { $this->encryptor = $encryptor; } public function indexAction($data) { $encrypted = $this->encryptor->encrypt($data); $decrypted = $this->encryptor->decrypt($data); } }
不使用自动注入
class MyController { public function indexAction($data) { $encrypted = $this->get('nzo_encryptor')->encrypt($data); $decrypted = $this->get('nzo_encryptor')->decrypt($data); } }
许可证
此 Bundle 受 MIT 许可证的约束。请参阅 Bundle 中的完整许可证。
查看 LICENSE