PHP - GET请求的源(主机名)

时间:2009-07-20 14:35:15

标签: php

我有一个人们可以嵌入他们网站的Javascript小部件。

我想使用简单的跨域get请求来引入哈希。

但是我需要我的PHP脚本才允许来自我存储在数组中的一系列域的此跨域请求。

我可以在PHP脚本(不在.htaccess或iptables中)中查找get请求的源(主机名)吗?

3 个答案:

答案 0 :(得分:4)

考虑到客户端(用户的浏览器)可以向您发送任何想要的内容,我会说没有办法确定您的脚本是从哪个网站调用的:

  • 由于您想知道嵌入小部件的网站的网址,而不是用户的地址,$_SERVER['REMOTE_HOST']无效
  • $_SERVER['HTTP_REFERER']似乎没问题,但事实并非如此:
    • 客户端不必发送它(并且它并不总是这样做)
    • 由于它是由客户发送的,它可以伪造/伪造很容易

所以,我会说这个问题没有真正的解决方案,至少在服务器端(如果我错了,我很想知道!)

但也许你可以在客户端做点什么:写这些时,我想到了谷歌地图,它是API密钥系统:

  • 您有一个(唯一的)API密钥四个域
  • 从谷歌加载JS脚本时,您发送此密钥
  • 如果没有为您尝试显示地图的域注册密钥,则会显示alert消息,说“ Google Maps API服务器拒绝了您的请求。这可能是因为此站点上使用的API密钥已注册到其他网站。
    • 但是地图似乎仍然显示 - 至少在我的测试服务器上
  • alert 对最终用户来说真的很烦人,我认为没有人会想要在他们的网站上显示警报,因为他们正在使用您的服务而没有授权。

也许你可以看一下谷歌地图是如何做到的: - )

答案 1 :(得分:2)

您可以使用$_SERVER变量。特别是 $ _ SERVER ['REMOTE_HOST'],但请参阅下面的警告:

  

但是,您的网络服务器必须是   配置为创建此变量。   例如,在Apache 中,您需要   HostnameLookups在httpd.conf 内   它存在。也可以看看   gethostbyaddr()

答案 2 :(得分:1)

如果请求来自JavaScript,您可以检查HTTP引用标头($ _SERVER ['HTTP_REFERER'])。但是,它是可选的 - 某些代理或安全程序会从HTTP请求中删除引用者标头。