【问题标题】:PHP token securityPHP 令牌安全性
【发布时间】:2015-06-09 19:40:40
【问题描述】:

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

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

  • 登录
  • 生成随机安全令牌并将其保存到磁盘
  • 将浏览器重定向到http://myhost/site?id=[securitytoken]
  • 在服务器端,我检查文件是否存在 - 如果存在,则用户已通过身份验证

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

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

【问题讨论】:

  • 搜索“会话固定”,这可能是您的方法的问题。如果您的安全令牌实际上是一个 SID,(会话 ID),那么它有它的缺点。就像我可以检查您的浏览器历史记录一样,我会看到它,或者如果有人打印了一个页面并且 url 打印在页面的顶部。小问题,但我认为通常会引起您的注意。
  • @RamyDeeb 他们在 SSL 上。怎么会被嗅到?
  • 如果您无法使用 cookie 来存储 PHPSID,请尝试使用 JavaScript 中的window.localStorage。结合客户端公钥身份验证 (travist/jsencrypt),它应该非常防弹
  • @RamyDeeb 在security.stackexchange.com/questions/19616/… 上看到这篇文章 - 然而,这篇文章让我有点不寒而栗 blog.philippheckel.com/2013/07/01/…
  • @Fred-ii- 一切都与信任有关。如果没有私钥并且客户端根据(受信任的)公钥进行验证,MITM 是不可能的。对于普通人来说,未加密/http流量的MITM是困难的(只有W-LAN,比较容易破解)。带有加密 / https 流量的 MITM,对于 普通 人来说是非常非常困难的,几乎是不可能的。 MITM 需要欺骗 ARP 表、WLAN 访问或访问客户端和 Internet 之间的任何设备。

标签: php security login token


【解决方案1】:

从网络的角度来看,使用 GET 代替 POST 没有固有的漏洞。

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

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

通常,Web 应用程序仅限于使用 localStorage,并且无法在后台静默读取/写入文件。你是如何做到这一点的?

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

【讨论】:

  • 非常好的和全面的答案,谢谢!是的,我正在使用 TLS,但感谢提醒!
【解决方案2】:

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

  • 默认在服务器日志中。
  • 在公司代理日志中。
  • 如果您的网页使用外部资源或指向外部域的链接,请在 referer 标头中。

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

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

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

【讨论】:

    【解决方案3】:

    获取表单中的 URL 变量的问题意味着:用户可以轻松地修改它(无论是否偶然),即使链接被复制到某个地方,他们也会留下来。

    如果您将您的链接发送给某人/某人获取了您的链接,其中包含 id 变量,这对您有安全风险吗?

    【讨论】:

    • 拦截代理也可用于MitM应用程序并任意更改任何HTTP请求(包括POST请求)。
    • 如果用户修改了链接,那么会话“过期”,他们需要重新登录。那么这是他们的错 :-) 这对我来说很好。发送链接,包括。安全令牌对我来说也没有问题。谢谢
    • 斯科特一切皆有可能,但有些比其他的更明显!
    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 2019-08-31
    • 2016-07-20
    • 1970-01-01
    • 2018-10-16
    • 2017-11-03
    • 2023-03-23
    • 2019-02-05
    相关资源
    最近更新 更多