【问题标题】:How securely store passwords for server side use?如何安全地存储密码以供服务器端使用?
【发布时间】:2011-05-13 04:40:38
【问题描述】:

我正在寻找一种安全的方式来将 FTP 密码存储在数据库中,该数据库仅供特定用户使用。 FTP 详细信息的存储方式应该是,如果暴露了整个数据库,则不会暴露 FTP 密码。这可能应该依靠用户的密码来临时解密 FTP 密码,仅当用户提示执行 FTP 操作时。我正在寻找可以实现这一点的解决方案。添加它可能很有用,涉及使用 javascript 和 php 的基于 Web 的应用程序。

这不是关于如何使用盐、哈希、md5、sha1 等。这是关于保护服务器应该能够使用的 FTP 密码,例如连接到 FTP 服务器。这对于哈希来说是不可能的,因为这只是一种方式。应该使用一些对称密码方法。

示例用例:

  • 用户登录服务器
  • 用户告诉服务器从安全存储在服务器上的 FTP 详细信息下载文件
  • 服务器查找 FTP 详细信息并删除加密(可能使用用户密码)这个问题是关于如何有效地实施此步骤
  • 服务器做任何事情,然后删除未加密的密码

【问题讨论】:

  • 我建议使用用户提供的密钥加密凭据,并在每次需要访问凭据时向用户询问该密钥...您或我可以设计的任何系统密钥和数据在同一个系统上势必容易受到攻击。

标签: javascript database encryption ftp password-protection


【解决方案1】:

听起来您正在寻找的是 MD5 哈希。

http://en.wikipedia.org/wiki/MD5

在将密码存储到数据库时经常使用它们,为了进一步安全,您可能还需要考虑对密码进行加盐处理。

http://en.wikipedia.org/wiki/Salt_(cryptography)

【讨论】:

  • 大多数情况下要避免使用MD5;使用 SHA1 或 crypt()
  • 这不是我要找的。这个想法是,您在服务器上存储了一些 FTP 连接详细信息,并且用户登录并能够使用我的应用程序服务器登录到 FTP 服务器,其中存储在服务器上的 FTP 登录详细信息。可能可以使用某种对称加密,但我不知道哪种方法能很好地满足我的目的。我将更新我的问题以更详细。
  • @meagar,你指的是什么 crypt()?
  • 不要使用这个建议这是可怕的建议!永远不要使用 MD5 或 SHA* 算法来存储任何密码。见Password Storage · OWASP Cheat Sheet Series
【解决方案2】:

编辑:虽然以下内容似乎不再适用于该问题(现在似乎希望以用户的名义运行 FTP 操作(未通过通用身份验证机制连接),但需要一个可逆方案),我离开它是因为我认为它包含有价值的信息。

我推荐阅读Enough With The Rainbow Tables: What You Need To Know About Secure Password Schemes

它可能会回答许多问题,包括什么是盐(如何防止彩虹攻击),为什么 MD5 不是密码哈希的理想解决方案(它太快了,不再需要“重大的加密突破” ),如果数据被泄露会发生什么(为什么不存储纯文本)等。它提供了有价值的见解。

我真的很喜欢这句话:

不,真的。使用别人的密码系统。不要建立自己的。

这是真的,即使是开玩笑的。

【讨论】:

【解决方案3】:

您可以使用 Mcrypt:http://php.net/manual/book.mcrypt.php

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多