当前位置: 首页 > 知识库问答 >
问题:

如何使用samesite=strict在OAUTH2之后重定向,并且仍然获得我的cookie?

后学
2023-03-14

完整的请求链是:

>

  • 发布https://provider.com/callback302找到:

    Location: https://me/login?code=xxx&state=yyy
    

    获取https://example.com/login?code=xxx&state=yyy302找到303查看其他(似乎无关紧要):

    Location: https://example.com/destination
    Set-Cookie: sid=zzzz; Secure; HttpOnly; SameSite=Strict; Path=/
    

    如果刷新,则获取https://example.com/destination200确定,因为此时站点是相同的,并且浏览器显示SIDcookie

    对于用户上次加载的页面不在example.com上的一般情况,我赞赏将SID呈现给/destination的CSRF潜力,但我只是将其从/login设置,现在我是重定向到/destination的人。

    当然,我可以设置samesite=lax,但是如果有人可以找到某种方法通过错误地创建URL来触发他们从我的站点选择的重定向,那么就不会有点击劫持的可能吗?

  • 共有1个答案

    梁丘亦
    2023-03-14

    我不认为出于安全原因可以这样做。samesite=strict表示,如果用户已被重定向或只是单击了指向您站点的链接(来自其他主机),则不应发送cookie。重定向就像“链接”请求。因此,如果您的服务器重定向到另一个服务器,而这个服务器立即用3xx代码重定向回来,将发送cookie,因为您的服务器是这个链的“顶部”。

    然而,如果您重定向到oauth提供商,并且用户必须允许您在那里访问他的帐户,这意味着这个“链”被打破了,即使您的站点设置了cookie(设置了但没有发送),也不会再发送cookie。您的重定向只是点击的“允许”链接的“扩展”。

    如果你想防止别人点击你的站点,如果你认为,你必须防止这种行为,如果你不这样做,它可能是危险的,就在链接中使用nonce。但是考虑到大多数提供商都在为您检查重定向url是否是以前定义的并且是应用程序允许的。

    这里有其他的解决方案(只有当你知道自己在做什么并且能承担起100%的责任时才使用)。

    • 使用“继续到站点”链接准备站点(当然,点击链接后将发送cookie)
    • 使用JavaScript重新加载窗口
    • 使用将重定向用户的JavaScript准备站点
    • 结合第一种方法和第三种方法,使解决方案更清晰,并且在浏览器中不支持JavaScript即可工作。

    我在开发的时候用过second,现在我用的是同一个站点lax(这是Hapi的默认设置,大概15个版本,所以还不算太差)。

     类似资料:
    • 问题内容: 我最近在属性“ Same Site”上阅读了“ RFC 6265”,我看了一些有关2016年4月的文章,Chrome 51和Opera 39已经实现了“ same-site”属性… 我想知道当前的PHP是否支持使用此属性创建cookie? 问题答案: [ 重要更新: 正如@caw在下面指出的那样,此hack 将在PHP 7.3中崩溃。现在就停止使用它,以保护自己免受不愉快的意外!或至少

    • 问题内容: 经过一些处理后,我想为用户输入设置一个cookie值,然后将其重定向到新页面。但是,cookie尚未设置。如果我注释掉重定向,则cookie设置成功。我认为这是某种形式的标题问题。在这种情况下最好的解决方法是什么? 请注意,无论哪种情况,setcookie都会返回,并且我不会收到任何错误/警告/通知。 编辑: 我正在使用Unix / Apache / MySQL / PHP 问题答案:

    • 我有下面的代码: 联机System.NullReferenceException:DownloadLinkList.Add(Item.SelectSingleNode(“.//a”).Attributes[“href”].Value); 怎样才能妥善处理,让它不再崩溃?我的印象是,它应该只是跳过前面。 使用也不是一个选项,因为我仍然需要没有所需的的某个页面的信息。

    • 问题内容: 我正在使用该方法打开URL并获取网页的标记。其中一些网站使用301/302重定向将我重定向。我想知道我已重定向到的最终URL。我怎么能得到这个? 问题答案: 调用返回的文件对象的方法。根据文档: —返回所获取资源的URL,通常用于确定是否遵循了重定向 例:

    • 问题内容: 登录检查后,我需要禁用重定向,因为我只需要获取登录成功与否即可。提交后/ login_check url给我正确的数据,但请继续重定向到/ login(失败)。 / login之后为空。 我正在尝试使用extjs 4设置登录表单,因此我需要通过ajax发布请求进行验证。login_check应该进行身份验证,创建用户会话并返回是成功还是失败,但是没有任何地方转发。 我的login.ht