以特定方式保护登录系统


Securing a login system in a particular way

我正在制作一个新的登录系统来练习我的 PHP,因为我制作的最后一个非常不安全,因为我发现我学到的越多......

无论如何,基本上我对如何真正使其安全感到有些困惑。关于这种状态的类似事情的很多答案,即不需要对每个页面的用户进行身份验证;他们只需要获得授权。但是,例如,我想让用户在更改帐户密码时强制当前登录帐户的所有用户注销(实际上,更改密码的人将保持登录状态,这是一个非常简单的任务......

我能想到的唯一方法是以某种方式存储密码,以便可以将其与数据库中的用户凭据进行比较。

从本质上讲,我有几个问题:

  1. 为什么大多数人认为不值得让登录系统以这种方式工作?
  2. 有没有一些我忽略的非常简单的方法?(无论哪种方式,如果有人能指导我这样做,我将不胜感激!
  3. 在让登录系统记住您时,cookie 中应该包含什么才能使其安全并仍然记住您?

谢谢!

良好的安全性依赖于多级身份验证...在会话和 cookie 中存储身份验证数据以及加密密码等。

回答您关于这如何工作的问题。

您可以构建一个基本的身份验证类,该类在经过身份验证的用户之后存储 cookie 并设置会话变量(包括密码哈希(。无论您使用哪种方法来验证用户在每个页面上是否经过身份验证,都可以检查数据库中的密码与哈希相比。如果它已更改,身份验证将失败。

您可以确保通过https连接设置cookie。 如果不是https,则不会设置cookie。setcookie 函数中还有一个参数,可让您将 cookie 限制为仅 http,以便 javascript 无法像跨站点脚本等那样获取 cookie。 http://php.net/manual/en/function.setcookie.php

安全性就是了解某些东西是如何工作的以及如何利用它。

有一个基本的方法可以做到这一点:

登录时 - 您将会话 ID、盐和用户密码哈希连接成一个字符串,然后 md5 对其进行哈希处理。将其存储在称为"auth"之类的cookie中。

现在,当他们请求页面时,您只需从数据库中选择用户密码,会话ID和盐的md5哈希= "身份验证"cookie。这样,如果没有匹配,则要求用户登录。