我有一个php页面“server1.com/page1.php”(不是真实的)和另一个页面“server2.com/page2.php”如何验证php中的请求服务器?
page1.php响应根据URL传递的参数可以来从任何服务器。
但我如何检查“server1.com/page1.php”是否从“server2.com/page2.php”调用或不。
在此先感谢
我有一个php页面“server1.com/page1.php”(不是真实的)和另一个页面“server2.com/page2.php”如何验证php中的请求服务器?
page1.php响应根据URL传递的参数可以来从任何服务器。
但我如何检查“server1.com/page1.php”是否从“server2.com/page2.php”调用或不。
在此先感谢
有很多方法可以实现。
最简单的方法是检查$ _SERVER ['HTTP_REFERER']以查看它是否匹配,但这不是100%可靠,并且不是真正的安全性。
第二种方法是使用PHP的会话功能。这需要两台服务器使用共享会话跟踪区域,这是一个更高级的服务器设置。
第三种方法是使用共享MySQL服务器,这两个服务器都可以访问来验证请求。这会引入延迟,这可能会减慢请求的速度。
第四种方法是使用回呼到始发服务器来验证它是否发出请求。 Server2向Server1发出请求,然后Server1与Server2联系,并询问它刚刚收到的请求是否真的来自它。
第五种方法是使用私钥/公钥对对您的请求进行签名。通过这种方式,您可以确定该请求是否来自它声称的服务器。
我以前做过这个,使用哈希,已知的秘密和时间戳。时间戳对确保潜在窃听者无法在他们选择的任何时间重放此过程是必要的。
或者,我会考虑加入用户名的散列,以便即使重放攻击是可能的,它将被锁定到一个用户名。
这些日子SHA1听起来有点太快了。 password_hash
的算法可能会更好,因为它们故意慢一些 - 如果你愿意,你可以轻松配置额外的轮。
说明:server2.com _ itself_正在使用server1.com上的页面,还是从另一个链接到另一个页面,并且它是同时使用它们的用户? – halfer 2012-03-23 17:55:15