【问题标题】:PHP referrer: How to make sure a request is actually coming from where it's supposed to come fromPHP referrer:如何确保请求实际上来自它应该来自的地方
【发布时间】:2010-07-25 18:01:31
【问题描述】:

我想在其他“已批准”域上放回我网站的链接。当他们点击链接时,它会转到一个页面,该页面会检查引荐来源 ($_SERVER['HTTP_REFERRER']) 以确保他们来自已获准拥有我的链接的域。这可以被欺骗,那么我如何确保点击实际上来自批准的域?

【问题讨论】:

    标签: php security api referrer referrer-spam


    【解决方案1】:

    你做不到。您无法阻止引荐来源网址被调侃。

    如果多个站点之间存在协作,则可以使用另一种方法。例如,其他站点中指向您​​站点的链接可以将令牌作为 URL 中的参数传递,该参数只能使用一次,然后您可以对其进行验证。

    可能有几种验证策略。您的站点可以联系另一个站点并询问它传递的令牌是否有效,或者您可以使用一个签名,该令牌充当随机数,这样您就不必联系另一个站点。

    【讨论】:

    • 确实,写的差不多。附属公司等通常通过在他们可以验证的 url 中来回设置一些 cookie 和获取参数来解决这个问题,这些参数不容易被破解(对 url 和 salt 等进行哈希处理)。
    • 签名生成和验证将类似于 OAuth 所做的 - 您甚至可以查看使用 OAuth 库中的代码来执行此操作。确保 URL 中有一个时间戳参数,您可以检查该参数以防止重复使用过时的链接。要么在时间检查中留出足够的余地,让人们在加载后一段时间内点击链接,要么让页面上的链接实际重定向到新生成并签名的 URL,从而让您有更短的到期时间。
    • 使用基于时间戳的 nonce 是一个很好的策略,因为您不需要存储您曾经见过的所有 nonce 以在将来拒绝它们。您只能存储在例如看到的那些。最后说 3 小时并拒绝所有较旧的。如果可以在短时间内使用一些重复使用的令牌,您甚至可以什么都不存储。
    • 这个随机数是什么?
    • @arfecto,我不能信任其他域,所以我不能依赖它们传回正确的数据以确保点击有效&感谢您澄清什么是随机数。我必须确保被点击的链接实际上来自批准的域,类似于联盟营销人员的做法。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多