PHP 令牌安全

PHP token security

我写了一个 PHP 需要登录的应用程序。此应用程序是私有的,因此没有新用户可以注册。首先,我使用会话来识别用户,但这会导致 tablets 出现问题,因为他们丢失了会话。我认为这是因为节能操作。

现在我更改了我的应用程序以生成随机安全令牌。所以认证如下:

现在一切正常我只是在考虑安全问题。如果用户看到安全令牌,则没有问题。当我使用 GET 时,是否有可能以某种方式找出令牌?我正在使用 SSL。

我尝试更改过期时间和 cookie 生命周期。在普通计算机上,它可以正常工作。在 table 上它也在工作 IF 它没有进入待机状态(意味着屏幕变黑)。如果屏幕变黑,则会话很快就会过期。

从网络的角度来看,使用 GET 而不是 POST 本身没有漏洞。

您应该记住的唯一警告是 GET 请求更有可能以您可能不希望的方式存储在客户端上(例如浏览器历史记录)。由于这些原因,我通常使用 POST 请求进行身份验证。

您尝试解决的问题听起来与 "remember me" cookies 非常相似。链接的博客 post 可能有助于减轻设计基于令牌的身份验证系统所涉及的安全风险。

通常,Web 应用程序仅限于使用 localStorage,不能在后台静默 read/write 文件。你是如何做到这一点的?

当您说您使用的是 SSL 时,您指的是 TLS 还是 SSL 第 3 版?如果是 SSLv3,我建议更新您的堆栈和网络服务器配置以支持 current best standards。带有 ECDHE 和 AES-GCM + SHA2 或 ChaCha20-Poly1305 的 TLSv1.2 是理想的。

get 表单中 URL 变量的问题意味着:用户可以轻松修改它(无论是否有意),即使 link 被复制到某处,它们也会保留。

如果您发送给某人您的 link/someone 得到您的 link 并且其中包含 id 变量,这对您来说是否存在安全风险?

GET 比 POST 更容易受到攻击,因为它可以传输和存储:

  • 默认在服务器日志中。
  • 在企业代理日志中。
  • referer header 如果您的页面使用外部资源或链接到外部域。

在您的示例中,您有一个 http URL(这可能是一个拼写错误,尽管您说您正在使用 SSL)。确保您使用 https URL 来保护传输中的数据。

这种方法也可能容易受到 Session Fixation 的攻击,因为攻击者可能会让用户访问包含或重定向到与攻击者相同的 session ID 的 URL。当受害者登录时,共享 session 将通过身份验证,这意味着攻击者现在也已登录。为防止这种情况,请在登录和注销时刷新 session ID。

Cookie 通常是 session 处理的首选方法,因为它们在上述情况下更难受到攻击。