关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
5年前关闭。
Improve this question
我知道这个问题已经被问过很多次了,但我对此有一点不同的看法。这是一个两部分的问题。
首先,我正在实现自动登录,我想知道我的工作流程中的任何漏洞。
其次,我不清楚黑客将如何使用他们窃取的信息来破坏系统。
第一部分,这是我的工作流程,哪些部分容易受到攻击。以下是一些可能会或可能不会有帮助的信息,我使用的是 PHP 5.6.21。我将使用他们的新哈希 API,它使用最新的哈希技术并自动对其进行加盐。我使用的是 MVC 架构,所以除了我的前端 Controller 和个人 Assets 之外,几乎所有东西都在 Web 服务器的根目录之外。
所以,它非常简单,没有用户数据存储在 cookie 中,只是一个无意义的散列。
我的问题的第二部分更笼统。假设黑客以某种方式破坏了自动登录 cookie 并获取了密码。他们可以用它做什么?他们怎么能用它来危害我的系统?
在 SQL 注入(inject)的情况下,我知道数据转储可能是可能的,并且黑客可以获得您数据库的只读 View 。在这种情况下,必须使用散列和加盐密码!他们可以通过他们的邪恶机器运行这些哈希,并可能获得您的登录凭据。
我正在阅读一些关于为什么采取所有这些措施很重要的安全文件。它一直在说,如果黑客可以访问您的数据库……但是,如果黑客可以访问您的数据库(具有写入权限),这一切都不重要,因为无论您的哈希值有多强,您都会被搞砸。
谢谢你的时间!
最佳答案
这有两个部分:
第二部分更有趣,因为很多人停留在“生成随机 token ,存储在 cookie 中,然后在数据库中查找”这一步。
您可以安全地假设您的高度优化的数据库查询不是在恒定时间内比较字符串,就像您需要这样做以防止计时攻击一样。
解决方案是将您的 token 分成两部分:一个用于数据库查找(定时泄漏),另一个用于在恒定时间内进行比较。
根据选择器检索 token 后,使用 hash_equals() 将用户提供的验证器的哈希值与存储的哈希值进行比较。 .
每个长期身份验证 token 只能使用一次。之后,应向最终用户发出更换件。注销应该清除 cookie,而 session 应该在浏览器关闭时过期。
这仅在您将 HTTPS 与 HSTS 一起使用时才是安全的,并且您的 cookie 设置为仅 HTTPS! (这意味着
secure
和 httpOnly
都设置为 true
。)您可以看到此系统的示例 here和 here .
关于php - 使用 PHP 自动登录安全,如何以及为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37348725/