PHP中的安全密码列表

时间:2010-02-10 11:23:32

标签: php security login

我正在考虑在public_html_root/system/config/

目录中的PHP文件中存储小规模(最多20个用户)应用的用户密码列表(最终有关它们的更多信息)
<?php if($calledByApp !== true) die();
  $pwds['username1'] = 'hispassword';
  $pwds['username2'] = 'herpassword';
  $pwds['username3'] = 'anotheroned';
?>

现在。 hispassword实际上是哈希版本

$hashedpasword = sha1($password.sha1($salt));

这样,如果包含文件,它会检查$calledByApp,这是从入口点开始设置的 - 即root中的index.php,所以我们可以说这样安全。如果直接从浏览器调用它 - 它将不会作为文本文件提供,而是作为PHP文件提供 - 它也会死亡,因为$calledByApp将返回nullfalse。< / p>

此外,如果存储/删除了其他用户,则会重建该文件,因此它会反映所有用户。在包含此文件后,我们将所有用户都设置为pretty array,因此如果我们调用

if (is_string($pwds[$sanitized_username]) 
&& ($pwds[$sanitized_username] === $sanitized_sha1_userpassword))

我们会登录。

我的问题是:这个足够吗?

澄清:用户的数据库似乎有点矫枉过正 - max 20个用户的另一个表。此外,虽然这不会检查用户是否是真的,但它不会对数据库执行任何操作 - 看起来也增加了安全性。

4 个答案:

答案 0 :(得分:5)

如果由于某种原因mod_php出现打嗝,可能会导致httpd显示未解释的文件;将脚本存储在文档根目录之外,以便解决此问题。

答案 1 :(得分:3)

我宁愿将该文件放在文档根目录之外,而不是依赖于PHP解释器而不会因任何原因而失败。

答案 2 :(得分:1)

不 - 这是一个非常糟糕的主意。

通过使您的源代码文件可写,您可以打开一个攻击系统的大道。 将数据嵌入到源代码中是一种混乱的做法 - 尤其是因为它无法扩展。 如果在脚本尝试包含该文件时锁定了更新,会发生什么? 如果在编写文件的过程中与浏览器的连接丢失,会发生什么?

如果你非常确定你只会拥有极少数用户和低并发性,那么到目前为止,abetter解决方案将是一个单独的目录,所有http访问被拒绝,包含一个文件每个用户,使用包含散列密码的用户名(或者您喜欢的哈希值)命名。

下进行。

答案 3 :(得分:0)

将加密密码存储在数据库中总是更安全。

如果您使用的是数据库,那么我会将用户数据存储在那里。如果没有,那么我会开始使用一个。