【问题标题】:PHP File Storing Password as a Text FilePHP文件将密码存储为文本文件
【发布时间】:2013-01-17 17:52:37
【问题描述】:

对于我只有朋友知道的非常小的网站,我正在开发一个密码系统。我将密码保存在这样的 php 文件中。

<?php
if($_GET["p"]=="password"){
?>
user1 password1
user2 password2
<?php
}
?>

然后,我可以使用 file_get_contents(pass.php?p="password"); 读取密码而且我仍然可以通过写入 php 文件来写入密码,就像我写入文本文件一样。这种方法不安全吗?是否有不需要数据库的类似方法?我认为我的网站不需要加密,如果密码被泄露也不会造成太大影响。

【问题讨论】:

  • 您确定您的朋友并且您不重复使用当前密码吗?
  • 使用SQLITE
  • it wouldn't hurt too much if the passwords were compromised.随心所欲;解决安全问题。

标签: php security passwords


【解决方案1】:

哇哦。我会说这很不安全。不使用数据库有什么原因吗?

另外,如果您愿意,为了在没有数据库的情况下使其更安全,您可以使用md5 和/或sha1 编码创建用户名+密码的组合,并将其保存为目录中的无扩展名文件,并且比较组合是否正确与file_exists

【讨论】:

  • 这在什么方面不安全?写入 php 文件和访问密码 php 文件需要主密码。我不需要世界一流的安全性。
  • 您的朋友可以轻松找到彼此的密码吗?主要是隐私。
  • 如果访问密码 php 文件需要主密码,那么您的朋友在登录时如何访问它?主密码存储在哪里,是文本文件还是 php 变量?
  • 那么让我把它收集起来。您有一个将用户名密码发布到 process.php 的表单。此文件从 pass.php?p=mainPassword 读取并与每一行进行比较?
  • 那么你的朋友在登录时基本上输入了两个密码?主密码和自己的密码?如果是这种情况,我想它是足够安全的。我的意思是就像你说的你不想要世界级的安全性。只要不公开主密码就应该没问题,但我的意思是实际上你的朋友甚至不需要个人密码,每个人都需要一个密码。
【解决方案2】:

查看http://www.hackthissite.org 网站,它可以让您做一些关于人们如何入侵网站的真实示例。其中一项基本任务是学习从包含的文本文件中获取密码。如果有人弄清楚文本文件的下落。可以轻松找到隐藏文件,然后他们将可以访问您的所有密码。这取决于您,如果您不关心安全性,您甚至可能没有登录系统。不过,如果您确实关心,只需获取 mysql,它是免费的,而且使用起来并不难。

【讨论】:

  • 但它不是文本文件,它是一个需要密码的php文件
【解决方案3】:

这些是改进您当前方法的一些建议。

  • 你可以限制对这个文件的直接访问,我记得使用 apache 重写模块。

  • 使用复杂密码(带有特殊字符和数字的短语)作为页面访问的主要密码。

  • 同样对于主密码,将密码的 md5 或 sha1 哈希值与 GET 变量的值的 md5 和 sha1 哈希值进行比较,而不是在其中放置纯文本。

  • 存储密码的 md5 或 sha1 哈希值,而不是存储纯文本密码。然后在比较密码时,您可以将用户输入的值转换为该值的哈希值,并将其与存储的值进行比较。

  • 我记得在散列时,您可以使用种子,这将进一步提高安全性。

这将使它更安全一些,因为如果有人登录到服务器,他不能直接获取您用户的密码文本。但请注意,大多数哈希值都可以使用雨弓表破解。但这至少比存储纯文本密码更安全。

但我仍然更喜欢您可以将数据存储在数据库中而不是像这样的文件中。

【讨论】:

    【解决方案4】:

    无论您将密码存储在文件中还是数据库中,都应采取相同的措施。不要在那里存储明文密码,而是只存储密码的哈希值。因此,即使有人可以读取文件,他也不知道密码。作为副作用,它还可以避免特殊字符的编码问题。

    使用 BCrypt 等慢速密钥派生函数对密码进行哈希处理。 MD5 或 SHA-512 之类的快速哈希函数不适用于对密码进行哈希处理,原因很简单,因为攻击者可以暴力破解它们的速度太快(使用普通硬件,每秒大约 8 Giga MD5 值)。

    PHP 很快提供了两个简单的函数password_hash()password_verify() 来生成这样的 BCrypt 值。还存在旧 PHP 版本的函数,看看这个answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      相关资源
      最近更新 更多