使用PHP的自动登录安全性,方式和原因

基思迈

我知道这个问题已经被问过很多次了,但是我对此有一些不同的看法。这是一个两部分的问题。

首先,我要实现自动登录,我想知道工作流程中的任何漏洞。

其次,我不清楚黑客如何利用他们窃取的信息来危害系统。


第一部分,这是我的工作流程,哪些部分易受攻击。以下是一些可能会有所帮助的信息,我正在使用PHP 5.6.21。我将使用他们的新哈希API,该API使用最新的哈希技术并自动对其进行加盐处理。我使用的是MVC体系结构,因此除前端控制器和个人资产外,几乎所有其他内容都不在Web服务器的根目录下。

  1. 成员登录并选择自动登录复选框

  2. 将具有与成员表中的哈希值匹配的哈希值的cookie写入其浏览器。Cookie只能从服务器上位于根目录之外的成员目录中访问。同样,设置了httpOnly属性。

  3. 成员下次登录时,将检查该cookie是否存在,如果存在,则使用哈希值作为在成员表中查找成员的键。

  4. 如果找到它们,则将其登录。如果设置了cookie,但是没有找到匹配的记录,则可能是cookie被篡改了。在这种情况下,请在数据库中创建一个新的自动登录哈希,然后在成员浏览器中删除cookie。然后,强制他们手动登录。如果他们再次选择自动登录,则使用新的哈希返回到步骤1。

因此,它非常简单,没有用户数据存储在cookie中,只是无意义的哈希。


我的问题的第二部分更为笼统。假设某位黑客以某种方式破坏了自动登录Cookie并获取了has代码。他们能做什么呢?他们如何使用它来危害我的系统?

就SQL注入而言,我了解可能会进行数据转储,并且黑客可能会获得数据库的只读视图。在这种情况下,必须对密码进行哈希处理和加盐处理!他们可以通过自己的恶意机器运行这些哈希,并可能获取您的登录凭据。

我正在阅读一些安全性文件,以了解采取所有这些措施的重要性。它一直在说,如果黑客可以访问您的数据库...但是,如果黑客可以访问您的数据库(具有写权限),那么这都不重要,因为无论您的哈希值有多强大,您都被搞砸了。

谢谢你的时间!

斯科特·阿西塞夫斯基

这有两个部分:

  1. 确保您的会话安全。阅读本文以获取会话安全性入门,并提供配置示例。破坏者:HTTPS是强制性的,请确保您使用CSPRNG作为会话标识符,并且在特权升级期间(和/或定期)重新生成会话ID。
  2. 安全地实施基于cookie的身份验证令牌,当用户使用有效cookie但没有活动会话访问您的网站时,它将透明地对用户进行重新身份验证。之前,我已经广泛地撰写了抗旁通道持久性用户身份验证的文章

第二部分更有趣,因为许多人停止了“生成随机令牌,将其存储在cookie中,然后在数据库中查找它”的步骤。

您可以放心地认为,经过高度优化的数据库查询不是在恒定时间比较字符串,就像为了防止计时攻击而需要的一样。

解决方案是将令牌分为两部分:一个用于数据库查找(定时泄漏),另一个用于固定时间比较。

  • 第一部分(称为选择器)存储/索引在数据库表中。
  • 第二部分(称为验证者)以纯文本形式存储在用户的cookie中,但在数据库中被散列(例如SHA256)。

根据选择器检索令牌后,您可以使用hash_equals()将用户提供的验证程序的哈希值与存储的哈希值进行比较

每个长期身份验证令牌仅应使用一次。之后,应向最终用户发出替代品。注销应清除cookie,而会话应在关闭浏览器时到期。

仅当您将HTTPS与HSTS一起使用并且cookie设置为仅HTTPS时,这才是安全的!(这意味着securehttpOnly都设置为true。)

您可以在此处此处看到正在运行的该系统的示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用PHP,JavaScript和HTML的MySQL安全性?

来自分类Dev

用于自动登录用户的 cookie 的安全性如何?

来自分类Dev

Laravel后端(API)路由和登录页面安全性

来自分类Dev

表单使用php提交安全性

来自分类Dev

表单使用php提交安全性

来自分类Dev

在 php 中通过会话登录的安全性

来自分类Dev

SharedPreferences的工作方式和安全性

来自分类Dev

Windows Bitlocker和自动解锁密码存储的安全性

来自分类Dev

使用安全性进行SSH登录吗?

来自分类Dev

PHP扩展未使用与PHP相同的调试和线程安全性来构建

来自分类Dev

HTTPS和安全性

来自分类Dev

PHP或/和JavaScript中的冗余安全性

来自分类Dev

PHP表单验证和XSS安全性

来自分类Dev

具有表单输入和安全性的PHP mkdir

来自分类Dev

Spring Boot安全性登录

来自分类Dev

关于git和wsl使用安全性

来自分类Dev

使用 Passport 和 MySQL 存储密码的安全性

来自分类Dev

使用 mySQLi 保留字和函数 - 安全性

来自分类Dev

使用SharedPreferences的安全性

来自分类Dev

Sendgrid的自动安全性如何工作?

来自分类Dev

允许使用PHP上传大文件(安全性)

来自分类Dev

PHP:使用http Referer添加安全性

来自分类Dev

带有AngularJS的Spring Boot和安全性登录页面

来自分类Dev

如何在SQL中隐藏某些用户的安全性节点和登录名?

来自分类Dev

Spring Boot安全性表单登录和Oauth2资源服务器

来自分类Dev

C#登录表单,登录按钮,安全性

来自分类Dev

对 PHP 文件的 AJAX 请求、PHP 文件的安全性和可访问性

来自分类Dev

使用安全性问题及其安全性

来自分类Dev

使用安全性问题及其安全性