我有一个与其他子网站链接的文件。
文件:http://site.com/file.img
网站A链接到<img src="http://site.com/file.img"></img>
网站B链接到它<img src="http://site.com/file.img"></img>
我需要可靠地识别哪些网站访问过该文件,但我知道$_SERVER['HTTP_REFERER']
可能会被欺骗。我还有哪些其他方法可靠地确认请求者站点?通过IP,让他们注册IP?不确定。设置API密钥?有什么选择?
答案 0 :(得分:5)
如果网站仅链接到文件,“网站”本身将永远不会实际访问您的图像。相反,正在查看网站的客户端将请求图片。
因此,您依赖于客户发送的信息,这完全不受您的控制,根本不可靠。如果您有机会在客户端上设置某种独特的cookie,您可以以某种方式使用它来进行扩展识别,但即使这样也不可靠。
没有100%可靠的解决方案。
答案 1 :(得分:2)
获取推荐人是您可以做的最好的事情,而不会进入复杂的领域。
如果您不介意复杂,请继续阅读:设置您的Web服务器以仅向网站A和网站B提供file.img
,然后要求网站A和网站B在其末尾设置代理配置,代表其访问者检索file.img
。
示例:
网站A的访问者加载包含<img src="http://websiteA.com/file.img"/>
等图片标记的网页(注意网站A的引用而不是您的网站)。客户请求来自WebsiteA.com的file.img
。网站A配置为将路径/file.img
的请求代理到您的服务器http://site.com/file.img
。您的网站验证它实际上是网站A请求图像,然后将其提供给网站A的代理。然后,网站A将其提供给访问者。
基本上,这会让网站A和B感到痛苦,给您带来性能损失,还需要您进行进一步的配置。但我想这会满足你的要求。
答案 2 :(得分:0)
了解如何实施OpenID依赖,它允许一个站点对另一个站点进行身份验证。协议规范将提示可靠地实现此类方案所需的工作量和开销。
http://googlecode.blogspot.com/2010/11/googles-sample-openid-relying-party.html