首页 文章

在PHP Web应用程序中进行安全登录的最佳实践是什么?

提问于
浏览
1

我想澄清一下安全Web登录的最佳实践是什么,以及针对Active Directory进行身份验证的PHP应用程序的持久登录 .

  • 登录时,实施Post-Redirect-Get模型是否有意义?在 $_SESSION 中存储密码可能不是一个好主意 .

  • 验证后,是否检查特定的 $_SESSION 字段是否设置了有效且安全的方法来检查用户是否已登录?

2 回答

  • 1

    在任何时间点以纯文本格式存储密码都不是一个好主意 .

    1)我不建议登录页面使用PRG模型 . 可能发生的最糟糕的事情是该人登录了两次 . 那不是那么糟糕 .

    存储在$ _SESSION中的数据通常不会被客户端读取 . 它们存储在恶意员工或黑客可能访问它们的服务器上 .

    2)经过身份验证后,可以检查会话以查看是否有人登录 . 有人可能会欺骗其他人的会话ID,但只要您运行SSL,这种可能性就会很小 . 我建议您可以在$ _SERVER变量中轻松存储IP,用户代理和其他信息,并偶尔或每次比较 . 减少某人攻击其他人的会话ID的机会 .

    在登录时重新生成会话ID对我来说没有多大意义,虽然我不知道你的特定场景 . 我的建议是在注销时简单地重新生成它 . 此外,您可以根据需要为会话添加超时功能 .

  • 1

    您应该只存储一些内容来区分匿名用户和登录用户,例如会话中的is_valid关键字 .

    这意味着任何捕获会话ID的人(这是在每个请求中明确发送的cookie值)都将获得会话 . 这叫做session hijacking ,现在是你唯一应该担心的事情 .

    保护您免受此攻击的方法是在登录时处理HTTPS中的所有连接用户页面...或者捕获noeone将进行XSS攻击或者破解用户wifi热点以获取会话ID .

    好吧,事实上,他们还有其他几种方式,比如存储客户端浏览器的某种签名(用户代理,也许IP可能会因移动代理,插入的插件列表等问题而出现问题),并且做出很好的哈希那 . 将其存储在cookie中并进行检查 . Edit: 您可以查看我对this question的回答以及跟踪和识别一个用户浏览器的一些方法,可用于确保同一用户仍然使用该会话 .

    Never 将密码存储在会话文件中,绝不存储密码 .

相关问题