PHP - 加密安全问题(我易受攻击吗?)

PHP - Encryption security concern (Am I vulnerable?)

我想通过 PHP 连接到 ssh。我可以很容易地做到这一点,但问题是登录详细信息(用户名、密码)的完整性。当我第一次尝试该代码时,我将我的用户名和密码存储在显眼的地方。我考虑过加密这些变量。通过查看其他问题,我发现 libsodium: https://github.com/jedisct1/libsodium-php

我正在使用他们的第一个字符串加密示例:

$secret_key = sodium_crypto_secretbox_keygen();
$message = 'Sensitive information';

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$encrypted_message = sodium_crypto_secretbox($message, $nonce, $secret_key);

Decryption:

$decrypted_message = sodium_crypto_secretbox_open($encrypted_message, $nonce, $secret_key);

通过查看示例,您可以看到 $encrypted_message$secret_key$nonce。我在加密登录详细信息时将这些变量插入数据库,然后在解密代码中需要时获取它们。

我还将我的数据库连接脚本 (PDO) 存储在一个文件夹中,其中有一个包含以下内容的 .htaccess 文件:

order deny,allow
deny from all
allow from 127.0.0.1

1. 我的方法安全且防黑客吗?

2. 如果有人破坏了我的数据库,他们能使用我的用户数据吗?

3. .htaccess文件的效果如何,能否阻止黑客访问数据库连接文件?

  1. 没有什么是完全防弹的。无论如何,这远非如此。缺少的是您的实施。首先加密它,然后将加密的消息与密钥一起存储在数据库中。

  2. 这就是解密所需的全部内容。因此,任何 SQL 注入缺陷或 server/database 漏洞都可能危及加密消息并使其无法使用。不要将私钥存储在服务器上; 尤其是 不符合预期的信息。如果你那样做,那只不过是昂贵的明文。

  3. 甚至不要将数据库连接文件存储在网络根目录中。黑客以这种方式获取是微不足道的,查找 LFI。您可以将其存放在室外,例如在 /var/www/ 中并从 /var/www/public/.

  4. 为您的 index.php 提供服务

如评论中所述,无论如何,您在这里所做的事情有点奇怪。使用带有密码短语的 SSH 密钥可能会更好。