【问题标题】:What is the most secure way to verify a redirect is coming from a specific domain?验证重定向是否来自特定域的最安全方法是什么?
【发布时间】:2021-09-14 18:24:24
【问题描述】:

我们当前的项目有一家合作伙伴公司希望重定向到我们的网站并继续 在我们的网站上的旅程。他们将连同重定向一起发送登录用户的数据。

确保重定向来自该特定域并安全发送数据的最佳方法是什么。

我正在考虑在查询字符串中使用 HTTP 引用标头以及加密数据?

【问题讨论】:

    标签: javascript php security


    【解决方案1】:

    连同查询字符串中的加密数据?

    只有在客户端或原始服务器已经向您发送了解密所需的信息时才能安全地工作 - 如果客户端知道如何解密它,客户端可能会篡改数据,并篡改请求标头,尽管不是来自第一个站点,但允许他们到达第二个站点。 (是的,HTTP 引荐来源网址 can be forged. 通常,客户端所做的任何事情都是不可信的。)

    执行此操作的安全方法是,当发件人站点确定经过身份验证的用户可以被授权重定向到您的站点时,让发件人站点发送 server-向您网站的后端发送请求,当然是加密的。您的后端可以将信息或令牌保存在数据库中,然后告诉原始站点请求已成功。然后原始站点可以与客户沟通,他们可以重定向到您的站点。当客户到达您的站点时,请在您的数据库中查找(加密的)令牌,以确保此类请求是在过去几秒钟内发出的,并且该令牌之前没有被使用过。

    设置所有跨站点通信确实需要一些努力,但一旦完成,您可以确定唯一允许的用户将由原始站点授权。

    【讨论】:

    • 在这种情况下,重定向 url 是否会在查询参数中发送单次使用令牌(假设如果我们在其他站点向我们的后端发出请求时发送回一个令牌),以便令牌可以匹配和验证吗?否则我们如何匹配用户和令牌?
    • 是的,重定向过程必须包括客户端以某种方式将令牌传递给您的服务器。将其作为查询参数将起作用。 (希望您的网站需要 HTTPS,现在免费设置很容易)
    【解决方案2】:

    在两个应用程序之间集成 SSO(单点登录)的理想方式是使用 SAML、OAuth 等企业集成技术。

    如果不可能,他们应该向用户发送一个唯一令牌 (GUID/UUID)

    然后,您的代码会调用合作伙伴应用服务器上的 URL 来验证令牌并获取用户的身份。

    这将确保用户的身份不会在重定向请求中被篡改。

    用户的身份信息绝不应作为 HTTP(S) 请求的一部分传递,因为它可以通过使用 burp 或 fiddler 等代理工具被篡改/更改。

    【讨论】:

      【解决方案3】:

      实现此目的的一种方法是在两个应用程序之间实施 SSO。如果您使用 SAML SSO,您始终可以使用证书以及签名和验证数据的来往来保护重定向。

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 1970-01-01
        • 2017-01-01
        • 2011-03-08
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多