图片两个网页,均使用https查看。它们位于不同的域中。
我如何(合理地)确保到达我页面的人通过位于另一个(特定)域名的超链接来到?我只想允许来自该域的流量。任何有关实现这一目标的最佳方法的想法都将受到赞赏。
我尝试查看HTTP_REFERER,但显然在这种情况下没有发送。我知道HTTP RFC指定不从https发送引用者信息 - > http,但这也适用于https - > https跨域或ssl证书?
如果重要的话,我的域在ASP.NET上运行。我无法控制源域。
谢谢。
答案 0 :(得分:6)
阐述mjv的回应:你应该把HMAC(RFC 2104)放入URL中。在两个服务器之间有一个共享密钥,并让原始服务器生成格式为/ timestamp / hmac / path的链接。应该从hmac(key,timestamp + path)验证hmac,以便不同的图像生成不同的hmacs。然后,目标服务器可以决定时间戳是否足够年轻以来自重定向。
您可以通过将客户端的IP地址放入hmac来进一步限制,请求接收URL的同一客户端也解析它。但是,在存在HTTP代理的情况下,这可能容易出错,这些代理只处理http而不是https,反之亦然。
答案 1 :(得分:5)
无论RFC 是否允许发送http_referer,您都会发现许多Web客户端和/或其与服务器之间的代理或其他与隐私相关的网关将被删除或欺骗头部中的http_referer,使大多数基于http_referer的“身份验证”方案最多具有部分功能。
如果您与第一个https服务器的保管人有一些合作,您可能同意在请求中向服务器传递基于时间+ something_else的排序哈希代码。通过验证您的哈希码,您将知道您的https访客来自其他服务器[最近]。
答案 2 :(得分:0)
如果你无法控制推介网站,那你就不走运了。
如果可以的话,嗅探引荐来源,如果不存在则会抛出一个登陆页面,上面写着“点击此处转到网站A,这样你就可以回到这里了”。
此外,花点时间研究一种更强大的访问“安全”网站的方法。