【问题标题】:Proper PHP Password Protection正确的 PHP 密码保护
【发布时间】:2016-04-24 03:53:06
【问题描述】:

我正在寻找在一个 PHP 页面上进行密码保护的正确过程。最好使用同一页面/文件中存在的所有代码。

我在 Stack Overflow 上看到过一些示例,但它们总是有将所有代码粘贴到页面顶部的说明。所做的是在页面顶部添加一个密码输入框,同时绝对加载您可能想要保护的所有内容,因为代码中没有任何内容或说明中没有明确指示如何制作它的信息是在输入密码之前实际上是隐藏的。

以下是回答问题时堆栈溢出通常发生的示例:

用户被告知将其粘贴到其 php 文档的顶部:

if (isset($_COOKIE['PrivatePageLogin'])) {
   if ($_COOKIE['PrivatePageLogin'] == md5($password.$nonsense)) {
?>

    <!-- LOGGED IN CONTENT HERE -->

<?php
      exit;
   } else {
      echo "Bad Cookie.";
      exit;
   }
}

if (isset($_GET['p']) && $_GET['p'] == "login") {
   if ($_POST['user'] != $username) {
      echo "Sorry, that username does not match.";
      exit;
   } else if ($_POST['keypass'] != $password) {
      echo "Sorry, that password does not match.";
      exit;
   } else if ($_POST['user'] == $username && $_POST['keypass'] == $password) {
      setcookie('PrivatePageLogin', md5($_POST['keypass'].$nonsense));
      header("Location: $_SERVER[PHP_SELF]");
   } else {
      echo "Sorry, you could not be logged in at this time.";
   }
}
?>

然后他们被告知将其直接粘贴到下面:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>?p=login" method="post">
<label><input type="text" name="user" id="user" /> Name</label><br />
<label><input type="password" name="keypass" id="keypass" /> Password</label><br />
<input type="submit" id="submit" value="Login" />
</form>

在这种情况下,任何东西都不会受到保护。该页面将立即加载所有内容,但页面顶部会有一个用户名和密码字段。从技术上讲,它可以正常工作,同时什么也不保护。

为了使这项工作正常进行,您是否将整个页面内容放在表单标签中?你是做什么的?

这似乎是一个奇怪的问题,但在这个网站的整个存在过程中,人们一直在回答这样的问题。该代码始终有效,但其基本使用说明通常不完整或不正确。

抢先回答几个问题: htaccess 是在浪费时间和精力,与仅仅保护文件或文件夹相比,您花费更多时间试图找出它导致内部服务器错误的原因。

信息不需要天网级AI保护,所以php就可以了。

【问题讨论】:

    标签: php passwords


    【解决方案1】:

    这个问题不能用一个合理的简短答案来回答,一个完整的登录系统有一些复杂性(数据库、散列、安全......)。尽管如此,我还是想给一些初学者:

    • 永远不要使用 MD5 来存储密码,PHP 提供了 password_hash() 和 password_verify() 函数。
    • 密码不应存储在 cookie 中,通常的做法是记住会话中的登录状态。一个随机令牌将维持会话。
    • 每个访问受限的页面都必须检查此状态,并在必要时重定向到登录页面。
    • 安全的网站需要 HTTP/SSL,否则您无法抵御 ManInTheMiddle 攻击。

    那里有很多教程(好的和不安全的),做一些研究并注意上面提到的要点。

    【讨论】:

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