在 PHP 中,可以使用 setcookie()
函数来设置和加密 Cookie 数据。为了保护 Cookie 数据的安全性,可以采用以下方法:
以下是一个使用 AES 加密的示例:
<?php
// 引入加密库
require_once 'vendor/autoload.php';
use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;
// 生成加密密钥
$key = Key::createNewRandomKey();
// 需要加密的数据
$data = 'Hello, World!';
// 加密数据
$encryptedData = Crypto::encrypt($data, $key);
// 设置加密后的 Cookie
setcookie('secureCookie', $encryptedData, [
'expires' => time() + 60 * 60 * 24 * 30, // 有效期 30 天
'path' => '/',
'domain' => $_SERVER['HTTP_HOST'],
'secure' => true, // 仅在 HTTPS 连接时发送
'httponly' => true, // 禁止 JavaScript 访问
'samesite' => 'Strict', // 防止 CSRF 攻击
]);
?>
在需要解密 Cookie 数据的地方,使用相同的密钥进行解密:
<?php
// 引入加密库
require_once 'vendor/autoload.php';
use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;
// 获取加密密钥
$key = ...; // 从安全的地方获取密钥
// 获取加密的 Cookie 数据
$encryptedData = $_COOKIE['secureCookie'];
try {
// 解密数据
$decryptedData = Crypto::decrypt($encryptedData, $key);
echo 'Decrypted data: ' . $decryptedData;
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
?>
注意:在实际应用中,请确保将加密密钥存储在安全的地方,不要将其暴露在代码中。可以考虑将密钥存储在环境变量、配置文件或外部服务中。