【问题标题】:PHP Password SecuringPHP 密码保护
【发布时间】:2011-08-11 17:19:29
【问题描述】:

我有以下一段 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();
}
?>

我想从另一个文件中处理 $data=array,这样会更安全一些。我将如何做到这一点?有什么想法吗?

【问题讨论】:

  • 如何将其放在另一个文件中使其更安全?

标签: php login security


【解决方案1】:

数据.php:

<?php

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

登录.php:

<?php

include('data.php');

... process login as usual

这并不比你的版本更“安全”,因为它们仍然以明文形式存储密码,任何对网络服务器具有文件级访问权限的人都可以盗取你的用户“数据库”,甚至不眨眼.

如果您坚持使用此方法,至少将“data.php”文件放在站点文档根目录之外的某个位置,这样它就不会位于远程 Web 用户可以轻松访问的区域。

【讨论】:

    【解决方案2】:

    这不是保护内容的正确方法。您永远不应该将密码存储在会话中,因为它可能会被泄露。下面是登录教程:

    http://www.phpeasystep.com/phptu/6.html

    这里是 php 安全性的概述:

    http://www.phpfreaks.com/tutorial/php-security

    【讨论】:

      【解决方案3】:

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

      这里真正担心安全性是您以明文形式存储密码。如果有人掌握了您的密码文件,他们可以按原样查看密码。这是非常危险的。您应该使用称为 hashingsalting 的技术:

      当用户注册密码时,您散列密码和称为盐的用户唯一随机字符串的组合。散列是一种单向函数,因此您会得到一个无法还原为原始密码但仍然是它的“指纹”的字符串。然后将这个“指纹”和相应的盐存储在数据库中。

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

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

      查看http://codahale.com/how-to-safely-store-a-password/ 了解有关此主题的更多信息。

      【讨论】:

        【解决方案4】:

        我想扩展 Marc B 的答案。

        将密码保存为纯文本绝不是一个好主意,将密码保存在 SESSION 数据中是不好的做法,也不会持久化。

        这是我在学习使用 php 进行用户身份验证时记下的一些笔记的链接。

        http://pastebin.com/sFmBJda1

        但长话短说,您需要散列并将散列值存储在数据库中的某个地方。即使它不是真正的数据库。将散列值存储在可以解析的文本文件中比存储纯文本密码更好。

        只需确保在对用户进行身份验证时,对他们的密码输入进行哈希处理,就像对密码进行哈希处理一样,然后与您存储的密码表/列表进行比较。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-20
          • 1970-01-01
          • 2011-05-18
          • 2013-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-11
          相关资源
          最近更新 更多