nzo/url-encryptor-bundle

NzoUrlEncryptorBundle 是一个用于在 Web 应用程序中加密和解密数据及变量的 Symfony Bundle,或通过 URL 传递,以提供更安全的方案。它还能防止用户读取和修改通过 URL 发送的敏感数据。

安装次数: 775,703

依赖项: 2

建议者: 0

安全: 1

星标: 87

关注者: 6

分支: 20

类型:symfony-bundle

v6.3.3 2024-09-10 12:26 UTC

README

tests Total Downloads Latest Stable Version

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