2011-08-11 360 views
2

我有以下PHP的片编码:PHP密码保护

<?php 
session_start(); 

$data=array("user1"=>array("url"=>"file1.php","password"=>"pass1"), 
"user2"=>array("url"=>"file2.php","password"=>"pass2")); 

if(isset($_POST['username']) && isset($_POST['password'])) { 
    if($data[$_POST['username']]['password'] == $_POST['password']) { 
     $_SESSION['username'] = $_POST['username'] . " " . $_POST['password']; 
     header('Location: ' . $data[$_POST['username']]['url']); 
    } else { 
     login('Wrong user name or password. <br>'); 
    } 
} else { 
    login(); 
} 
?> 

我想具有$数据=阵列从另一文件处理,使得它更安全一些。我怎么做到这一点?任何想法?

+0

如何把它在另一个文件中作出任何更安全? –

回答

1

data.php:

<?php 

$data = array(.... user/password data here ...); 

的login.php:

<?php 

include('data.php'); 

... process login as usual 

这不是任何更 “安全” 比你的版本,因为它们都仍然有存储明文密码,任何拥有文件级访问权限的人都可以在没有眨眼的情况下窃取用户的“数据库”。

如果您坚持使用这种方法,至少应将'data.php'文件放在您站点文档根目录的外部,以便它不在远程Web用户可以轻松访问的区域。

0

你在正确的轨道上,当你说,你应该存储其他地方的密码我会推荐一个数据库,但如果你必须使用一个文件,那么你可以在你的PHP文件的开始读取文件。

real对安全性的担心在这里是您以明文存储密码。如果任何人获得密码文件,他们可以按原样查看密码。这非常危险。您应该使用被称为技术散列腌制

当用户注册了一个密码,你哈希密码并称为盐用户独特的随机字符串的组合。哈希是一种单向函数,所以你得到一个字符串,它不能与原始密码相反,但仍然是它的“指纹”。然后,您将这个“指纹”和相应的盐存储在数据库中。

当进行登录尝试时,您将以相同的方式计算哈希值,并查看哈希值是否匹配。这样,你永远不会以明文存储密码。

盐的原因是为了防止使用称为的彩虹表的攻击工具。使用每用户随机盐可防止攻击者使用预先计算的密码到哈希表。

查看http://codahale.com/how-to-safely-store-a-password/以获取关于此主题的更多信息。

0

我想扩展Marc B的答案。

以纯文本保持密码是不是一个好主意,并保持在密码会话数据不好的做法,也不会持久。

下面是一些笔记,我当我学习有关身份验证的用户提供了PHP的链接。

http://pastebin.com/sFmBJda1

不过长话短说,你需要和哈希散列值,某处存储在数据库中。即使它不是一个真正的数据库。在你可以分析一个文本文件中存储哈希值比存储明文密码更好。

只要确保当它的时间来验证用户,您的哈希密码输入您散列密码,并且然后与已存储密码的表格/列表的方法相同。