【问题标题】:PHP - Encryption security concern (Am I vulnerable?)PHP - 加密安全问题(我容易受到攻击吗?)
【发布时间】:2018-01-21 21:03:35
【问题描述】:

我想通过 PHP 连接到 ssh。我可以轻松做到这一点,但问题是登录详细信息(用户名、密码)的完整性。当我第一次尝试代码时,我将我的用户名和密码存储在了显而易见的地方。我考虑过加密这些变量。通过查看我发现的其他问题libsodiumhttps://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 文件的效果如何,能否阻止黑客访问数据库连接文件?

【问题讨论】:

  • 这应该发布在代码审查中
  • 为什么要加密细节?这是没有意义的。如果您的服务器遭到破坏,那么攻击者将拥有获取明文用户名和密码所需的一切。
  • 我从未尝试过使用 php 打开 ssh 连接,但我建议使用公钥/私钥对而不是密码来进行 ssh 连接。存储加密密码似乎是个非常糟糕的主意。
  • @LukeJoshuaPark 好吧,如果访问源代码/资源和数据本身存在差异,那么加密可能需要攻击者首先访问源代码。否则你是对的:这将是简单的混淆,而不是真正的加密。

标签: php encryption libsodium


【解决方案1】:
  1. 没有什么是万无一失的。无论如何,这远非如此。缺少的是您的实现。首先加密它,然后将加密的消息与密钥一起存储在数据库中。

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

  3. 甚至不要将数据库连接文件存储在 Web 根目录中。黑客通过这种方式抓住它是微不足道的,查找 LFI。您可以将其存储在外部,例如在 /var/www/ 并从 /var/www/public/ 提供您的 index.php。

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

【讨论】:

  • 感谢您的解释。我只想知道一种存储加密消息的安全方法。它们不是密码,而只是随机数字和字母,类似于密码,但仅出于验证其真实性的原因而必须获取它们。例如,我想在数据库中存储 paysafecard 代码(16 个随机数),然后检索它们并在尝试提取存储在它们上的金额时手动检查代码是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2015-12-31
相关资源
最近更新 更多