正确的PHP密码保护

正确的PHP密码保护,php,passwords,Php,Passwords,我正在寻找在一个PHP页面上执行密码保护的适当的过程。可与同一页/文件中存在的所有代码一起预过滤 我在这里看到了一些关于堆栈溢出的示例,但是它们总是有将所有代码粘贴到页面顶部的指令。它的作用是在页面顶部添加一个密码输入框,同时在下面加载您可能想要保护的所有内容,因为代码或说明中没有明确指示如何设置密码的内容,因此在输入密码之前,信息实际上是隐藏的 以下是回答问题时堆栈溢出通常发生的情况的示例: 用户被告知将其粘贴到php文档的顶部: if (isset($_COOKIE['PrivatePage

我正在寻找在一个PHP页面上执行密码保护的适当的过程。可与同一页/文件中存在的所有代码一起预过滤

我在这里看到了一些关于堆栈溢出的示例,但是它们总是有将所有代码粘贴到页面顶部的指令。它的作用是在页面顶部添加一个密码输入框,同时在下面加载您可能想要保护的所有内容,因为代码或说明中没有明确指示如何设置密码的内容,因此在输入密码之前,信息实际上是隐藏的

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

用户被告知将其粘贴到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.";
   }
}
?>
if(isset($\u COOKIE['PrivatePageLogin'])){
如果($_COOKIE['PrivatePageLogin']==md5($password.$durse)){
?>
然后,他们被告知将其直接粘贴到下面:

<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>

这个问题不能用一个合理的简短答案来回答,一个完整的登录系统有一定的复杂性(数据库、哈希、安全性等等)。不过,我想给一些初学者介绍一下:

  • 要存储密码,请不要使用MD5,PHP提供了和函数
  • 密码不应存储在cookie中,记住会话中的登录状态是常见的做法。随机令牌将维护会话
  • 每个访问受限的页面都必须检查此状态,并在必要时重定向到登录页面
  • 一个安全的站点需要HTTP/SSL,否则就无法防止ManInTheMiddle攻击
有很多教程(好的和不好的),做一些研究并注意上面提到的要点