PHP文件将密码存储为文本文件

时间:2013-02-02 14:29:41

标签: php security passwords

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

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

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

4 个答案:

答案 0 :(得分:2)

哇。我会说这很不安全。有没有理由不使用数据库?

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这些是改善现有方法的一些建议。

  • 你可以使用apache重写模块来限制直接访问这个文件。

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

  • 对于主密码,还要比较密码的md5或sha1哈希值以及GET变量值的md5和sha1哈希值,而不是将纯文本放在那里。

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

  • 当进行散列时,你可以使用种子,因为我记得,这会增加安全性。

这会使它更加安全,因为如果有人登录到服务器,他就无法直接获取用户的密码文本。但请注意,大多数哈希值都可以使用雨弓表来打破。但这至少比存储纯文本密码更安全。

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

答案 3 :(得分:0)

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

使用像BCrypt这样的慢键派生函数来散列密码。像MD5或SHA-512这样的快速哈希函数不适合散列密码,只是因为攻击者可以过快地强制它们(使用普通硬件每秒大约8千兆位MD5值)。

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