【问题标题】:Storing a password in a PHP script在 PHP 脚本中存储密码
【发布时间】:2016-06-02 13:23:13
【问题描述】:

假设我有一个包含单个密码的文件。它被 Apache 阻止以拒绝访问。然后,我创建了一个 PHP 脚本来读取这个文件并对内容进行处理(验证)。也许我的 PHP 脚本说

$pswd = file_get_contents("pswd.txt");

这安全吗?有没有办法让某人获得`$pswd 的价值?如果文件被 Apache 阻止了,即使 PHP 脚本正在读取它,它是否可以被认为是私有的?

它不需要非常安全,不涉及金钱。潜在的攻击者不会有太强烈的动机。唯一的直接用户将是 iOS 平台上,因此将恶意代码注入基于密码的 GitHub 存储库不会通过 iOS 的安全性走得太远。

【问题讨论】:

  • 与其将密码显式存储在文件中,不如对密码进行哈希/校验和,将其保存在文件中,然后根据用户输入的密码进行检查。这样,不存在密码被盗的危险。
  • 这不是用户输入的密码。它是一个单一的、固定的密码,需要由我的网络应用程序访问。除非我手动更改它,否则它永远不会改变。我只是不想在 PHP 脚本的代码中暴露它,在使用服务时可以访问它。
  • 你可以找到一些关于 here
  • 为什么需要固定密码?
  • Web 应用程序需要对 GitHub 存储库具有部分写入权限。它需要使用对用户隐藏的密码登录到 GitHub 存储库。

标签: php apache security web passwords


【解决方案1】:

如果您对数据进行加密,这对您来说是可能且安全的。可以解密的可能加密是openssl

$txtpass = "password in textfile";
$key = "password" // Encryption password to 'lock and unlock' the data
$iv = "1234567812345678";
$encrypted = openssl_encrypt($txtpass, 'AES-128-CBC', $key, 0, $iv);
$decrypted  = openssl_decrypt($txtpass, 'AES-128-CBC', $key, 0, $iv);

使用这样的 htaccess 文件

<Files ~ "pswd.txt">
   Order allow,deny
   Deny from all
   Satisfy All
</Files>

并存储一个加密的通行证,你就可以开始了

【讨论】:

  • 太棒了。那我就调查一下。您能否详细说明带有 Apache Deny from all 的文件究竟是如何易受攻击的,攻击者如何获得它?
  • 我偏向于未加密的文本文件,这样我就可以在 GitHub 上发布 PHP 文件而无需修改,并且无论如何都具有安全性。当然,我可以在提交之前更改它,但我很懒,不想这样做。
  • 不要使用静态 IV;使用加密随机 IV 并将该 IV 与您的加密数据一起明文存储在文本文件中。每次更改密码时都会生成一个新的随机 IV。不要使用 $txtpass 作为密码本身,使用具有高迭代的 PBKDF2 之类的东西,甚至是 password_hash(BCrypt;提取哈希本身并仅保存盐和工作因子)。从 PHP 7 开始,您还使用undocumented function,这可能是一个非常糟糕的主意。
  • 我知道,但安全性不必是高端安全性。它只是一个额外的功能。通常,您可以将密钥添加到加密文本的末尾。而且我从未说过要使用文件内部的密码作为加密密钥。另外,十六进制数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2016-01-16
  • 2019-03-09
  • 2018-07-28
相关资源
最近更新 更多