我最近制作了一个带有用户名和密码登录名的PHP登录脚本,用于测试会话而没有MySQL。
我将密码存储在像这样的数组中
$filepassword[1] = "123"; // User Bob
$filepassword[2] = "321"; // User Tim
用户名以相同的方式存储在数组中
$fileuser[1] = "Bob"; // Password 123
$fileuser[2] = "Tim"; // Password 321
我使用Post来获取输入的密码,然后将其放入for循环中,如果密码等于数组中的密码则会中断并返回1,然后检查数字是否与用户名匹配并检查其是否为匹配。
但是,我应该在php文件中存储密码甚至哈希吗?
答案 0 :(得分:10)
为什么要使用php文件存储用户名和密码?使用数据库进行用户名/密码检索是非常标准的(现在很简单)。
话虽这么说,你不想要以纯文本形式存储数据库中的密码。
PHP 5.5有一个whole new set of password functions即将推出,那么你如何使用一个允许这些功能向前兼容的库呢? Password_compat
关键是,你包含文件,使用它的函数,然后当5.5出来时,你只需删除include,所有函数仍然可以工作,因为它们是核心的一部分。
使用起来非常简单:
password_hash()
password_verify()
验证$ _POST中针对数据库中的哈希发送的密码。就是这样!简单,安全,向前兼容。强烈建议使用平面文件存储。
你真的应该花时间学习MySQL。但是,对接口而不是具体实现进行编码是很棒的,并且可以随时将一种类型的存储转换为另一种类型。
话虽如此,请将您的密码和用户名哈希,如果必须,请将它们写入文件。至少他们会被散列,而不是纯文本。您仍然可以使用上述功能。
你甚至可以serialize()
你的数组并将其写入文件,然后在回来的路上unserialize()
。但我真的建议你抽出时间学习MySQL的基础知识,你马上就可以把它拿起来。
答案 1 :(得分:2)
是的,没有。
PHP是服务器端语言,所以通过客户端没有人能看到密码。
BUT 1:如果黑客可以访问服务器,则密码不会被保存和泄露。 2:出现错误并且php文件看不到php而是文本,因此服务器将PHP作为文本输出,再次受到损害
所以在意义上强烈建议至少哈希它们以保证安全。
然后是将其保存在php文件中的问题。它有一些问题。 1:不易使用,使用数据库可以进行不错的搜索等 2:你在php中加载一个(及时)巨大的数组,只需要1个值。浪费记忆
答案 2 :(得分:0)
对于少量密码,将它们存储在文件中是完全可行的。你应该只选择 sane 数组格式,你的......非常不理想。此外,如上所述,永远不要以明文存储密码。
passwords.php
<?php
return array(
'Bob' => '$2y$10$lwnevwevweuvuev...', // hash of Bob's password
...
);
的login.php
<?php
// include https://github.com/ircmaxell/password_compat functions
require_once 'lib/password.php';
$passwords = require 'passwords.php';
if (isset($_POST['username'], $_POST['password'])) {
if (!isset($passwords[$_POST['username']])) {
die('Invalid username');
}
if (!password_verify($_POST['password'], $passwords[$_POST['username']])) {
die('Invalid password');
}
echo 'Hi there!';
}
只要您使用强大的算法正确存储密码哈希,将它们存储在文件中几乎不比使用数据库更不安全。请注意,您应该非常小心,不要意外地泄露该PHP文件的内容;错误放置的var_debug($passwords)
或配置错误的Web服务器可能会使密码哈希值公开显示。在这种情况下,他们仍然是哈希,但保持秘密仍然更好。使用经过验证且用户友好的库进行散列,例如https://github.com/ircmaxell/password_compat。
答案 3 :(得分:-5)
我认为最安全的选择是使用md5()函数。 $ fileuser [1] = md5($ fileuser [1]); 等...
将所有内容转换为md5然后您可以将转换后的字符串相互比较以获得相等或不等。
希望我有所帮助。