0

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

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

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

4

4 回答 4

2

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

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

于 2013-02-02T14:35:49.730 回答
0

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

  • 您可以使用我记得的 apache rewrite 模块来限制直接访问此文件。

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

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

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

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

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

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

于 2013-02-02T15:12:53.927 回答
0

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

于 2013-02-02T14:56:27.297 回答
0

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

使用像 BCrypt 这样的慢速密钥派生函数来散列密码。像 MD5 或 SHA-512 这样的快速散列函数不适用于散列密码,因为攻击者可以暴力破解它们的速度太快(使用普通硬件每秒大约 8 Giga MD5 值)。

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

于 2013-02-03T20:02:27.100 回答