【问题标题】:How to require a password to view site? [closed]如何要求密码才能查看网站? [关闭]
【发布时间】:2012-11-18 02:20:54
【问题描述】:

您知道要求用户输入指定密码才能查看您的网站的方法吗?喜欢这个网站,例如Click。我在想它是.htaccess,但我不想保护任何目录。我只是希望我的朋友能够登录我的网站,而不必出于安全问题更改我的目录名称。

【问题讨论】:

  • 这个话题太广泛了……有很多方法可以用密码保护您的网站。显然,您希望密码不在用户可用的源代码中。一种方法是签入 MySQL 数据库,但您需要清理输入,这本身就很棘手。
  • 有一百种方法可以解决这个问题。最简单的方法是使用 Basic Auth 或 Digest Auth 之类的方法。这些可以使用您选择的服务器端语言来完成,也可以配置为由您的服务器直接处理。 (.htaccess 只是一个服务器配置文件,顺便说一下)如果你想要一个基于 Web 的表单,那么你需要编写特定的代码来处理它。

标签: php javascript password-protection


【解决方案1】:

Apache htaccess 听起来像您需要的。您链接到的网站有一个定制的网站登录信息,可以用 PHP 或任何网站编码的方式编写。

设置 Apache 来执行此操作很简单,首先使用 htpasswd 命令创建密码:

    htpasswd -c .htpasswd dave

然后把这个放到 .htaccess 文件中:

    AuthUserFile /full/path/to/.htpasswd
    AuthType Basic
    AuthName "My Secret Folder"
    Require valid-user

【讨论】:

  • 感谢大家的帮助。 Gezpage,我了解您有关 .htpasswd 的说明,但我将如何设置 htpasswd -c .htpasswd dave?就像这必须在我的主机上完成还是与文件相关。
  • 假设您可以通过控制台访问 Web 服务器,在您希望保存密码文件的目录中执行上面的 htpasswd 命令,然后在 .htaccess 文件中指定此位置,以便使用登录访问网页时创建的 .htpasswd 文件中的 /password。
【解决方案2】:

它通常称为“登录系统”,它通常还需要一个用户名(但在您的示例中没有)。 .htaccess 与此无关,应该用 PHP 或任何其他脚本语言来完成。

登录系统通常需要一些输入验证和数据库技能。如果你不拥有它们,我强烈建议你学习一些关于 PHP、XSS、Sql Injection、Mysql 和 PDO 的知识。

【讨论】:

    【解决方案3】:

    通常这是通过服务器端脚本和数据库来完成的。无法使用Javascript,因为无论您对代码进行多少混淆,任何人都可以右键单击“查看源代码”来找出您的密码。我看到你标记了 php。在php中,它相当简单。设置一个带有用户名和密码框的 HTML 表单(通过 POST,而不是 GET!,否则密码将显示在浏览历史记录和 url 栏中)。示例表单如下所示:

        <html>
        <body>
        <form action="login.php" method="post">
            Enter your username: <input type="text" name="user" /> <br />
            Enter your password: <input type="text" name="pass" /> <br />
            <input type="submit" value="Login" />
        </form>
        </body>
        </html>
    

    然后在login.php中:

        <?php
             session_start();
    
             $db = mysqli_connect("server","db_user","db_pass","database_name");
             $stmt = $db -> prepare("SELECT pass FROM users WHERE username=?");
             $stmt -> bind_param("s",$_POST['user']);
             $stmt -> execute();
             $stmt -> bind_result($result);
             if ($_POST['pass']==$result)
             {
                  $_SESSION['auth'] = "yes";
                  header("Location: index.php");
             }
             else
             {
                   die("Authentication rejected!");
             }
        ?>
    

    那么您需要做的就是将以下代码放在您想要“密码保护”的所有文件的开头:

        <?php
             session_start();
             if (isset($_SESSION['auth']))
             {
                  if ($_SESSION['auth']!="yes")
                  {
                      header("Location: login.php");
                  }
             }
             else
             {
                  header("Location: login.php");
             }
        ?>
    

    这假设您有一个 MySQL 数据库(免费且易于安装),其中包含一个名为 users 的表,其中至少包含一个用户列和一个密码列。很容易找出这段代码,而且这绝对不是唯一的方法!但是,这是一种不错的方式,因为它包含输入卫生等基本必需品(您可以在其他地方阅读)。

    祝你好运!这确实是一个巨大的问题,在计算机安全中极为重要。事实上,这是一个十亿美元的问题:“我如何让好人进来,而把坏人拒之门外?”

    【讨论】:

    • 其他建议都很好,可能比这简单得多。然而,这确实让你有点弄脏你的手,而且不是更多的工作。自己做事总是好的! (除非你重新发明轮子)
    • 您不应将密码以纯文本形式存储在数据库中
    • 我将密码存储在 Sha1 中。此外,在我的主目录中,我已经有一个 index.php 和一个 login.php。我将 login.php 更改为 inc.login.php,但如何将其修复到显示两个索引的位置?
    • 我同意不以纯文本形式存储它。但是,由于有很多方法可以加密数据,我把它留给他。至少,md5+salt。但是我确实认为使用准备好的语句比加密密码更重要,因为只有在数据库泄露的情况下才需要加密。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2023-03-03
    • 2015-09-28
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多