提高服务器验证时的密码安全性


Improve password security in server verification

我目前正在构建一个设置来获取信用卡信息。使用了以下结构:

服务器1:

    MySQL用户设置为只读
  • 保存登录凭据。

我使用PBKDF2哈希,通过基于此代码构建的类完成。

服务器2:

  • MySQL用户设置读写
  • 保存所有客户的信用卡信息

问题:

如果服务器1以这种格式存储密码:算法:iterations:salt:hash

例如:sha256:1000:Pe27BkIKkBHklogp9Io80iRKtF+6koly:nrYUwOlixwJECRcjBRKwQ+MVNMTbnYnm

如果服务器1被入侵,在我看来,这种格式的密码将使他们很容易破解网站的密码并访问用户的信用卡信息。

这是一个情况下,我需要使用Mysql (AES_ENCRYPT()和AES_DECRYPT())?

我是不是想多了?

是否有更好的方法来保护服务器1中的信息?

基于注释的

更新

我建立了我的供暖和空气公司系统。如果愿意,任何在线付费的人都可以将抄送信息存储在quickbooks中。我有几个大客户,我们每月在办公室给他们计费,并通过桌面终端处理抄送。这些客户端在我们的服务器上有客户配置文件,他们可以访问这些配置文件。这些是我希望允许在那里存储cc信息的客户端。这样,我就不必把抄送信息保存在办公室的纸上,让任何人都能找到。

说实话,如果我设法破坏了服务器1,我不会试图破解这些密码。他们应该是安全的。我更可能做的是尝试在服务器上安装我自己的代码,以便在用户登录时向我发送密码和/或信用卡信息。例如,假设您在一个名为login.php的文件中处理身份验证。如果我可以破坏login.php,那么当它验证登录时,我可以让它执行curl命令或其他东西将登录信息发送到我自己的服务器,在那里我可以收集它。

我离题了…答案是,用户登录详细信息的散列应该是安全的,正如您所描述的那样。如果服务器1的数据库受到威胁,它应该尽可能安全。您可以在PHP代码中添加一层混淆层,以便在盐的散列中进行更改或其他操作,这样可以访问数据库但不能访问代码的人就很难知道您使用了什么过程来散列密码,这将避免黑客尝试暴力破解密码(如password, iloveu等)。我还强烈建议服务器2上的信用卡信息使用AES_ENCRYPT()或PHP的mcrypt_encrypt()函数以加密格式存储。

确保您通过POST表单对所有输入进行了消毒,然后就可以开始了。