如何找出哪个网站要求我的网页?

时间:2013-09-30 19:05:41

标签: php

我有一个网页...像一个api一样...基本上它以json的形式打印出一些数据。

其他网站只需使用file_get_contents

即可通过php使用此数据

javascript / jquery ajax request(jsonp)

无论如何,我希望能够将一些不需要的网站列入黑名单,所以我必须知道这个请求来自哪里

我试过

 $url     = $_SERVER['HTTP_REFERER']; 
 $domain  = parse_url($url, PHP_URL_HOST);

但是我得到了

Undefined index: HTTP_REFERER

所以除非我弄错了,这是一个奇怪的例外,HTTP_REFERER在这里不起作用。

那么在file_get_contents页面请求的情况下如何获得裁判?

5 个答案:

答案 0 :(得分:1)

请注意,Ajax请求通常是通过客户端的浏览器发送的,而服务器通常会调用file_get_contents()或类似的工具来获取您的页面。

因此,对于服务器,您可以针对黑名单检查REMOTE_ADDR HTTP标头(其中包含来电者的IP)。

对于Ajax请求,可能来自用户代理,您无法真正说出来自哪个网站。

虽然我不确定,但HTTP_REFERER标题可能包含该标题,但我还没有检查过它。

UPDATE (Ajax请求)
稍微查看一下后,我发现浏览器不会发送带有XHR请求的引荐来源数据,因此您只能将您不想访问的服务器的IP列入黑名单。

答案 1 :(得分:0)

如果服务器直接请求它,那么你可以使用$ _SERVER'REMOTE_ADDR'和'REMOTE_HOST'。

如果他们使用javascript,那么你只会获得客户端ip。您可以使用strtolower($ _ SERVER ['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest')来禁止jquery请求。

答案 2 :(得分:0)

您所需要的是$_SERVER['REMOTE_ADDR']吗? AJAX调用可能没有Referer标头,这就是你得到错误的原因。

答案 3 :(得分:0)

HTTP Referrer由浏览器发送,可能不是由file_get_contents()发送!

您可以使用$_SERVER['REMOTE_ADDR']。这将为您提供TCP堆栈的原始IP地址。

在服务器端API调用的情况下,您获得服务器的IP(假设客户端不使用任何代理)。

但是,如果客户端是AJAX请求,您将获得查看该页面的用户的IP地址。

答案 4 :(得分:0)

HTTP_REFERER不可靠。您可以尝试$_SERVER['REMOTE_ADDR']检查远程客户端的IP地址。

但我认为,您可以更好地将已批准的客户端列入白名单,而不是将其列入黑名单,因为攻击者可以轻松代理请求以绕过基于IP /主机的黑名单。

whiltelisting有很多种方法:

  • 白名单知道IP
  • HTTP身份验证
  • 您自己的自定义API密钥
  • 第三方身份验证(即OAuth)

等等。