完整的请求链是:
>
发布https://provider.com/callback
302找到
:
Location: https://me/login?code=xxx&state=yyy
获取https://example.com/login?code=xxx&state=yyy
302找到
或303查看其他
(似乎无关紧要):
Location: https://example.com/destination
Set-Cookie: sid=zzzz; Secure; HttpOnly; SameSite=Strict; Path=/
如果刷新,则获取https://example.com/destination
200确定
,因为此时站点是相同的,并且浏览器显示SID
cookie
对于用户上次加载的页面不在example.com
上的一般情况,我赞赏将SID
呈现给/destination
的CSRF潜力,但我只是将其从/login
设置,现在我是重定向到/destination
的人。
当然,我可以设置samesite=lax
,但是如果有人可以找到某种方法通过错误地创建URL来触发他们从我的站点选择的重定向,那么就不会有点击劫持的可能吗?
我不认为出于安全原因可以这样做。samesite=strict
表示,如果用户已被重定向或只是单击了指向您站点的链接(来自其他主机),则不应发送cookie。重定向就像“链接”请求。因此,如果您的服务器重定向到另一个服务器,而这个服务器立即用3xx代码重定向回来,将发送cookie,因为您的服务器是这个链的“顶部”。
然而,如果您重定向到oauth提供商,并且用户必须允许您在那里访问他的帐户,这意味着这个“链”被打破了,即使您的站点设置了cookie(设置了但没有发送),也不会再发送cookie。您的重定向只是点击的“允许”链接的“扩展”。
如果你想防止别人点击你的站点,如果你认为,你必须防止这种行为,如果你不这样做,它可能是危险的,就在链接中使用nonce。但是考虑到大多数提供商都在为您检查重定向url是否是以前定义的并且是应用程序允许的。
这里有其他的解决方案(只有当你知道自己在做什么并且能承担起100%的责任时才使用)。
我在开发的时候用过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