我有一个网页...像一个api一样...基本上它以json的形式打印出一些数据。
其他网站只需使用file_get_contents
或
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
页面请求的情况下如何获得裁判?
答案 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有很多种方法:
等等。