gpt4 book ai didi

php - 以可逆形式存储密码

转载 作者:IT王子 更新时间:2023-10-29 00:15:14 26 4
gpt4 key购买 nike

我有一个 PHP 应用程序需要运行 bash 脚本,并提供用户名和密码(用于远程系统)。我需要将这些凭据存储在我的 PHP(Web)应用程序可以访问的地方。逻辑位置是数据库(目前是 MySQL,但将不可知)。散列和存储凭据的“标准”方式的问题在于它是不可逆的。我能够以未加密的明文形式获取凭据,以便能够将数据插入 bash 脚本。

有人对解决此问题的安全方法有任何建议吗?

我想也许 PKI'ing 凭据,并将结果存储在数据库中。然后使用私钥解密(PHP 可以做到)。将脚本存储在 Web 根目录之外执行此操作。

非常感谢任何想法。

最佳答案

首先,声明(希望如此)显而易见,如果您能以任何方式避免存储用户名和密码,请这样做;这是一项重大责任,如果您的凭据存储被破坏,它可能会为同一用户提供对许多其他地方的访问权限(由于密码共享)。

其次,如果您必须使用不可逆的加盐加密散列来存储凭据而不是存储密码,那么如果您的数据被泄露,密码就不容易被逆向工程并且根本不需要存储解密 key .

如果您必须存储可解密的凭据:

  1. 选择一个好的加密算法 - AES-256、3DES(已过时)或公钥密码(尽管我认为对于此用途而言没有必要)。使用来自信誉良好且值得信赖的来源的加密软件 - 不要尝试自己动手,否则很可能会弄错。
  2. 使用安全 随机生成器生成您的 key 。弱随机性是加密相关安全故障的首要原因,而不是密码算法。
  3. 将加密/解密 key 与您的数据库分开存储在一个 O/S 安全文件中,只有您的应用程序运行时配置文件可以访问。这样,如果您的数据库遭到破坏(例如通过 SQL 注入(inject)),您的 key 不会自动受到攻击,因为这通常需要访问 HDD。如果您的操作系统支持与配置文件相关联的文件加密,请使用它 - 它只能提供帮助并且通常是透明的(例如 NTFS 加密)。
  4. 如果可行,将 key 本身用主密码加密存储。这通常意味着您的应用程序。将需要在启动时输入该密码 - 在脚本的参数中提供它没有任何好处,因为如果您的 HDD 被破坏,您必须假设可以查看 key 文件和脚本。
  5. 对于每个凭据集,存储一个salt(未加密)和加密数据;这用于“启动”加密密码,使得两个相同的密码不会产生相同的密文 - 因为这表明密码是相同的。
  6. 如果用户名不是定位帐户记录所必需的(在您的情况下不是),请加密用户名和密码。如果您同时加密两者,请将它们加密为一次加密运行,例如

    userAndPass=(user+":"+pass);
    加密初始化();
    加密(盐);
    加密(用户密码);
    cipherText=encryptFinal();

    并存储单数blob,这样短密文出现的次数更少,更容易破解,用户名进一步加盐密码。

PS:我不使用 PHP 编程,因此无法评论该环境中合适的加密软件。

关于php - 以可逆形式存储密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com