我应该在OAuth 2回调中验证HTTP Referer吗?

我应该在OAuth 2回调中验证HTTP Referer吗?,http,authentication,oauth,http-headers,oauth-2.0,Http,Authentication,Oauth,Http Headers,Oauth 2.0,我能够使用我的Oauth2 servlet成功地验证Facebook和Google帐户。我将state与计时器和会话cookie一起使用,以验证它是否确实是合法的Oauth回调 如果我还检查HTTP Referer头以确保从提供者的OAuth页面重定向,有什么好处吗 如果没有好处,那么如果我同时检查HTTP Referer字段,是否会出现问题 不验证HTTP引用程序;“state”参数(听起来您正在使用)是抵御跨站点请求伪造(CSRF)攻击的关键参数 你可能想看看莱恩·博伊德的奥雷利新书。它描述

我能够使用我的Oauth2 servlet成功地验证Facebook和Google帐户。我将state与计时器和会话cookie一起使用,以验证它是否确实是合法的Oauth回调

  • 如果我还检查HTTP Referer头以确保从提供者的OAuth页面重定向,有什么好处吗

  • 如果没有好处,那么如果我同时检查HTTP Referer字段,是否会出现问题


  • 不验证HTTP引用程序;“state”参数(听起来您正在使用)是抵御跨站点请求伪造(CSRF)攻击的关键参数

    你可能想看看莱恩·博伊德的奥雷利新书。它描述了这一点以及相关的安全注意事项。

  • 我可以将任何想要的头模拟为恶意攻击者。我可以让它看起来像我来自
    http://cia.fbi.gov.vpn/uber1337h4x
    。这是显而易见的,也是众所周知的

  • 来自
    HTTPS
    的任何页面都不会根据以下内容发送引用标头:

    如果引用页面是使用安全协议传输的,则客户端不应在(非安全)HTTP请求中包含引用者标头字段

  • 按照以下要求进行操作:

    由于链接的源可能是私有信息,或者可能会显示其他私有信息源,因此强烈建议用户能够选择是否发送Referer字段

  • 简而言之,你没有得到更大的安全感。您的安全性不在于检查一个非常不安全的传输协议,而在于OAuth层。你也破坏了可用性

    不要这样做。

    答案是:

    No, you shouldn't use it, and there is NO valuable benefit of doing it.
    
    授权服务器也非常清楚这一点。有人说

    从:

    在收到URL中的授权代码后,回调URL页面应立即重定向到受信任页面。这可防止授权代码保留在浏览器历史记录中,或在引用器标头中意外泄漏

    • 如果您担心CSRF,那么不应该使用HTTP引用器作为验证授权来源的技术,这就是为什么参数状态为(您正在使用的声音)

    • 如果您担心oauth2协议的特定安全问题,那么有一个问题

    • 如果您担心其他安全问题

    我建议您尽全力实现param:state周围的所有验证

    编辑:

    在阅读了问题的细微差别之后,请回答您自己的问题。在这两种情况下,使用cookie(可能是HTML5本地存储)是迄今为止我们知道的最好的解决方案

    • 第一个细微差别是关于CSRF,可用的可能对策之一是,这已经是

    • 第二个细微差别,我不完全确定,但可能是一个扩展授权的案例,这是因为听起来您可能是一个“身份验证代理请求者”,与之相同


    由于使用了
    状态
    参数,因此问题不涉及普通安全性

    我考虑的主要问题是:

  • 是否是我的应用程序发送到Facebook的同一个浏览器返回以显示候选令牌
  • 无论是代理(类似浏览器的代理)还是代理反复执行OAuth请求,并向我提供坏的OAuth令牌,这些令牌会导致我的应用反复使用坏令牌与Facebook联系,从而导致Facebook的潜在不良处理
  • 第一个问题唯一可能的解决方案是,除了使用
    状态
    之外,还可以设置cookie<如果大多数提供商不使用https,code>referer会有所帮助

    第二个问题有细微差别。行为不当的代理不需要由恶意实体直接控制。他们可能是通过一些间接手段(一个流行的被劫持网站,社会工程)重定向的普通用户

    由于细微差别,
    referer
    标题可能不是伪造的。然而,https排除了任何有意义的好处

    Cookie在第二种情况下肯定会有帮助,因为如果你在帖子中设置Cookie,没有第三方网站会导致设置Cookie,而且你不会因为被黑客网站将用户全部重定向到OAuth而被OAuth错误的响应淹没


    这不是一个明确的答案(或问题),但希望这能显示问题背后的细微差别。

    HTTP Referer
    ,这样的标题可以很容易地模拟出来。用户可以发送任何标题。但我认为您可以检查ip地址以确保请求的源ip地址不是用户的ip地址吗?不,来自服务器的令牌将是服务器ip地址(facebook、twitter等)。但您需要始终控制ip地址列表,它们可能会更改是的,我正在使用状态进行非常健壮的检查。感谢链接到RFC(但我的工程师有点生气,因为使用Oauth进行身份验证这样简单的事情而被引用到O'Reilly的书中)道歉;我不是有意冒犯你的!老实说,我觉得这本书很有价值,这也是我推荐它的主要原因(这是新的,所以不广为人知。)我和它没有任何关系;好好读一读。哦,请不要道歉!我只是在开玩笑;)我很高兴你发现这本书很有价值,我相信很多其他人也会从这本优秀的书的详细阅读中受益!我确信它提供了关于复杂的客户端、服务器+浏览器通信工作流的宝贵而关键的信息,更不用说设备和应用了。封面上有一只漂亮的动物,这也是一本环境友好的书。(读了这篇文章,你第一次投了赞成票;)绝对没有更大的安全感。事实上,我在问题中没有提到安全这个词;只是“利益”。我用状态来保证安全,这就足够了。我确实用了“合法”这个词