没有数据库存储用户名和密码的最佳方法

时间:2010-05-06 17:26:26

标签: php login-script

我想在PHP中构建一个简单的单用户登录“库”,但我面临以下困境:如果我没有使用数据库,应该如何存储用户名和密码?

可以轻松读取简单的纯文本文件,然后可以轻松地输入密码,这不是一个选项。

如果我用

创建一个php文件
<?php
    $Username= "username";
    $Password= "password";
?>

然后没有人应该能够阅读它,我可以简单地将这个文件包含在我需要的地方,但我不确定你找不到更好的方法来做到这一点!

那么,在您看来,这个问题的最佳解决方案(及其原因)是什么?

由于

9 个答案:

答案 0 :(得分:3)

您可以将其存储在文件中并使用SHA1 / SHA2哈希,这样就无法解密。

user:<sha1hash>
user:<sha1hash>
...

答案 1 :(得分:3)

纯文本文件一个选项,这是最简单的解决方案。只需哈希密码(salt)。它无法可靠地解密。

您可以使用PHP的md5sha1哈希函数。

答案 2 :(得分:2)

如果您需要多个帐户,则纯文本文件比使用PHP源文件更容易。我觉得你担心人们会通过浏览器请求文件吗?

检查您的Web主机是否具有某种不可公开访问的目录,例如实际Web内容所在的父目录。 PHP通常能够在那里读写,但无法通过网络访问。

如果您无权访问此类目录,则文件权限和/或.htaccess files(Apache)可能会对您有所帮助。

我建议您使用crypt函数来存储密码(哈希),而不是存储普通密码。这是一个单独的问题,您可以通过以下方式存储它们:)

答案 3 :(得分:1)

  • 您可以使用具有hashcrypt功能的纯文本文件。 如果你有很多用户,它是可靠但不灵活的。

  • 您还可以使用SQLite这是一个数据库,但它不是服务器,而是存储在一个简单的文件中。 如果您无法安装SQL服务器但希望存储大量用户并具有更大的灵活性,这是一个很好的折衷方案。

  • 根据您的目的,.htaccess可能是一个很好的解决方案。 它已经是安全的,但作为纯文本解决方案,它并不依赖于灵活性。但它内置了几乎所有的Apache配置。

答案 4 :(得分:1)

如果只有一个用户,拥有用户名的目的是什么?

也可以使用.htaccess ...

管理权限

答案 5 :(得分:1)

(这是对Daniel DiPaolo的评论,以回应Mokuchan。)

如果要存储密码(无论位置如何),请使用以下方案:

$ hashedPassword = $ salt。 hash($ salt。$ password);

散列密码的存储位置应该是安全的。无论是在数据库中还是在具有适当权限设置的文件中。

如果是文件,用户 bob 的密码密码的“记录”看起来像这样(使用BCrypt Hash):

bob:$2a$05$tlk4M8WSpVkO7ER6QGxcwuY91MrBCQn.TCDZ5eOM1iz2sCChtR62K

任何人都无法“解密”密码。这就是使用哈希算法的全部要点:它是不可逆的。

你声明:

  

有一些工具试图解密md5和sha1,至少在某些情况下它们似乎可以工作

由于散列算法是不可逆的,因此无法实现。 (没有'解密'选项)

我最好的猜测是你指的是一个从预先计算的表中查找哈希的工具,它返回了一个有效的输入字符串,可能是你的密码。
这些表称为rainbow tables。它们可以被A)使用随机盐和B)使用强哈希算法(例如BCrypt哈希或SHA2族哈希)击败

关于不正确的散列算法:MD5和SHA1被认为是加密破坏的。换句话说:你不应该再使用它们了。

有关此问题的讨论,请参阅:https://stackoverflow.com/questions/2768248/is-md5-really-that-bad

答案 6 :(得分:0)

同意所有那些说你可以加密密码的人。

另外,请勿将文件放在文档树中。把文件放在别的地方。你的PHP程序应该仍然能够通过指定一个绝对路径或相对路径来读取它,而不是“..”,无论多少级别处理层次结构,然后处理文件所在的位置。 (在Java应用程序中,有一个WEB-INF目录,可以方便地存储这类东西。我不认为在PHP中有类似的东西 - 我已经有一段时间了,因为我已经完成了任何PHP - 但你可以总是把文件完全放在应用程序的目录层次结构之外。)

答案 7 :(得分:0)

答案 8 :(得分:0)

最好的方法是

$ password_hash = hash(“sha256”,“iamawesome”); // 4aa4029d0d0265c566c934de4f5e0a36496c59c54b6df8a72d9c52bdf0c1a0e8

$ user_entered = hash(“sha256”,$ _POST ['password']); return($ user_entered == $ password_from_db);

hashin将保护您的密码..

详细文章:http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way