我正在使用PHP开发一个应用程序,该程序将一些客户详细信息存储在MySQL数据库中。(姓名,电子邮件地址,电话号码,邮寄地址)我没有存储任何“敏感”信息,例如银行/信用卡详细信息,SSN / SIN,DOB等。仅是基本的客户详细信息。
但是,尽管显然会采取安全预防措施,但如果黑客获得了数据库的副本,我希望有一种体面且相对简单的方法来使此数据非常难以使用(通过对其进行加密)。
我已经读到,在MySQL查询中执行加密的安全性较低,因为加密密钥将缓存在数据库的查询日志中。
因此,不建议这样:
UPDATE customers SET email = AES_ENCRYPT('me@gmail.com', SHA2('encryption key here', 512));
Run Code Online (Sandbox Code Playgroud)
我已经看过关于堆栈溢出的许多问题以及其他资源。但是,许多建议至少有5年的历史了,现在PHP 7.2(及更高版本)可能会有更简单的最佳实践。
我研究过Defuse,但是我倾向于避免在我不是绝对需要它们的地方使用第三方库。(我更喜欢理解代码并将其最小化,以满足我的需求。)
在查看PHP文档(https://www.php.net/manual/zh/function.openssl-encrypt.php)时,我发现该用户提供了建议,该建议看起来很容易实现:
--- Create Two Random Keys And Save Them In Your Configuration File ---
<?php
// Create The First Key
echo base64_encode(openssl_random_pseudo_bytes(32));
// Create The Second Key
echo base64_encode(openssl_random_pseudo_bytes(64));
?>
--------------------------------------------------------
<?php
// Save The Keys In Your Configuration File
define('FIRSTKEY', 'Lk5Uz3slx3BrAghS1aaW5AYgWZRV0tIX5eI0yPchFz4=');
define('SECONDKEY', 'EZ44mFi3TlAey1b2w4Y7lVDuqO+SRxGXsa7nctnr/JmMrA2vN6EJhrvdVZbxaQs5jpSe34X3ejFK/o9+Y5c83w==');
?>
--------------------------------------------------------
<?php
function secured_encrypt($data)
{
$first_key = base64_decode(FIRSTKEY);
$second_key = …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Bull 进行队列的应用程序。是否有一个参数可以传递给它,以便在创建每个条目时自动为其设置 TTL(生存时间)?
const Queue = require('bull')
const webApiQueue = new Queue('webApi', {redis: REDIS_URL })
// Producer
const webApiProducer = (data) => {
webApiQueue.add(data, { lifo: true })
}
Run Code Online (Sandbox Code Playgroud)
如果直接使用 Redis 设置密钥,则可以使用setex key_name 10000 key_data
但是我怎样才能在 Bull 中实现这样的功能呢?它只是一个 API 处理队列,我希望它在 24 小时后自动删除条目。
我在文档中没有看到任何内容: https ://github.com/OptimalBits/bull#documentation