23

使用没有数据库或用户名但使用 php 来密码保护文件夹的最佳方法是什么?基本上我有一个页面,将列出组织的联系人,并且需要密码保护该文件夹,而无需为每个用户提供帐户。只有一个密码会经常更改并分发给群组。我知道这不是很安全,但我更想知道如何做到这一点。以最好的方式。

如果用户正确输入密码后能暂时记住密码,那就太好了。


我大致按照大卫赫吉的建议做,除了没有饼干。它看起来确实不安全,但最好有一个糟糕的密码保护然后根本没有。

这是针对内部站点的,人们会花时间记住他们的登录名和密码,并且永远不会经历注册 过程……除非真的很容易,否则他们根本不会使用该系统。

我想看看这个问题的其他解决方案。

由于用户群由不太懂技术的人组成,还有其他方法可以做到这一点。

4

5 回答 5

72

编辑:SHA1 不再被认为是安全的。存储的密码哈希也应该加盐。现在有更好的解决方案来解决这个问题。


你可以使用这样的东西:

//access.php

<?php
//put sha1() encrypted password here - example is 'hello'
$password = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d';

session_start();
if (!isset($_SESSION['loggedIn'])) {
    $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
    if (sha1($_POST['password']) == $password) {
        $_SESSION['loggedIn'] = true;
    } else {
        die ('Incorrect password');
    }
} 

if (!$_SESSION['loggedIn']): ?>

<html><head><title>Login</title></head>
  <body>
    <p>You need to login</p>
    <form method="post">
      Password: <input type="password" name="password"> <br />
      <input type="submit" name="submit" value="Login">
    </form>
  </body>
</html>

<?php
exit();
endif;
?>

然后在您要保护的每个文件上,放在顶部:

<?php
require('access.php');
?>
secret text

这不是一个很好的解决方案,但它可能会做你想要的

编辑

您可以添加一个 logout.php 页面,例如:

<?php
    session_start();
    $_SESSION['loggedIn'] = false;
?>
You have logged out   
于 2008-11-13T14:13:16.170 回答
8

假设您使用的是 Apache:

http://httpd.apache.org/docs/1.3/howto/htaccess.html#auth

于 2008-11-13T13:50:07.090 回答
4

如果您想避免使用 cookie、会话并且不想玩 .htaccess 文件,您还可以使用 PHP 单独进行 http 身份验证:

http://www.php.net/manual/en/features.http-auth.php

您可以将密码硬编码到文件中并根据需要进行更改,或者从不在您的 web_accessible 目录中的文件中包含它。

缺点是您无法格式化“登录”屏幕 - 这将是一个标准的 http 身份验证对话框

于 2008-11-14T16:36:19.827 回答
1

我怀疑这是否算作最好的做法,但它会奏效。而且由于安全性对您来说似乎不是一个大问题,因此这种方式非常不安全的事实可能也不会打扰您。

有一个 login.php 页面,该页面接受密码,然后在登录详细信息正确时设置 cookie。然后每个 php 文件可以检查 cookie 的存在以确定用户是否“登录”,并相应地显示信息。

login.php
...
if(isset($_POST['password']) && $_POST['password'] == 'my_top_secret_word') {
    setcookie('loggedin', 'true', time() + 1200, '/url/');
} else {
    setcookie('loggedin', 'false', time() - 1200, '/url/');
    // display a login form here
}
etc

然后每个“受保护”页面将检查此 cookie:

if(isset($_COOKIE['loggedin'])) {
    if($_COOKIE['loggedin'] == 'true') {
        $showHidden = true;
    } else {
        $showHidden = false;
    }
} else {
    $showHidden = false;
}

我敢肯定你明白(高度不安全)的想法......

于 2008-11-13T14:10:34.053 回答
-2

好吧,既然您一开始就知道它是不安全的,您可以将密码存储在 Web 服务器上某处的文本文件中。当有人访问该页面时,您可以显示一个要求输入密码的表单。如果密码与文本文件中的内容匹配,则重新加载页面并显示信息。使用文本文件将允许您更改密码,而无需在您想要更改密码时修改他们正在访问的页面。除非您使用 SSL,否则您仍将到处发送纯文本。如果您需要一些代码,请告诉我。

于 2008-11-13T14:03:28.063 回答