【问题标题】:Php, get the referer from an ajax requestPhp,从 ajax 请求中获取引用者
【发布时间】:2012-04-02 13:11:44
【问题描述】:

我需要获取用户向我的服务器发送 ajax 请求的完整域,并且它应该有点安全。

$_SERVER['HTTP_REFERER']

返回空白。 我应该使用什么功能? 提前致谢。

【问题讨论】:

  • @AlexAmiryan,你知道有什么解决办法吗?

标签: php ajax http-referer


【解决方案1】:

一些浏览器只是不使用 XHR 请求发送引荐来源网址数据。引用标头是可选的,无论如何都可以伪造。所以:你不能

Same Origin Policy 可能会为您提供所需的所有保护(尽管您尚未明确说明您的用例,因此很难确定)。

【讨论】:

  • ajax 请求确实有效(我已经通过 php 配置了它)但它没有获取远程域。
  • $_SERVER["HTTP_REFERER"] 不是您应该信任的值。该值可以设置为用户喜欢的任何值。此外,用户可以手动禁用引用。尝试重新编写脚本以在没有引用者的情况下工作。但是,不要依赖推荐人的价值。
  • @agam360 这取决于您的脚本。如果您想检查请求是否来自某个主机,那么您可以将主机作为参数添加到您的 ajax 请求中。这样做用户仍然可以编辑此值,但这是任何用户发送的值的普遍问题,只能通过值检查来软化。与使用 http-referrer 的区别:用户工具/插件可以在用户不知情的情况下禁用该referrer 以进行匿名化。他不能再使用你的脚本了。使用主机作为参数可确保每个用户(无需编辑值)至少会得到正确的响应。
  • @TRD 好的,我想我想出了一些东西,告诉我它是否好。我将创建一个 temp-api-key:每次请求后服务器都会发送一个新的 js 文件作为客户端通信文件,这只会更改那里的对象中的 api 参数,然后每次都会检查该密钥并在假设 10 个请求后再次生成,因此没有人可能“破解”系统,你怎么看?
  • 是什么阻止了攻击者每 10 次请求使用新密钥请求新的 JS 文件?
【解决方案2】:

您的目标似乎是保护您的服务器 API 免受未经授权/过多请求的攻击/垃圾邮件。在这种情况下,您要检查的所有内容都可能被欺骗,您可能想尝试使用工作量证明算法。

看看http://hashcash.org

通过强制客户端“支付”(使用计算周期)向您发送要处理的数据,您可以过滤掉一般机器人,以免给您带来问题。

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 2011-12-20
    • 2014-08-23
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多