我在SERVER_B上有fileA.php,在SERVER_B上有fileB.php
fileB.php向fileA.php发出curl请求以获取其内容
fileA.php如何确定请求是否来自fileB.php?
-
我正在考虑将fileB.php中的$ _SERVER ['SCRIPT_NAME']发送到fileA.php,但由于有人可以进入fileB.php或任何文件,只需执行$ _SERVER ['SCRIPT_NAME'] =' fileB.php“;它并不那么安全。
那么出于安全原因,我如何确定请求来自不同服务器上的特定文件?
答案 0 :(得分:4)
你不能,可靠。您可以尝试设置HTTP标头并在另一侧验证;它不是万无一失的,但它比大多数都好。
答案 1 :(得分:2)
不可能,因为你的陈述:
"since someone can go into fileB.php"
答案 2 :(得分:2)
为什么不设置一个秘密令牌,并在接收端验证它?
// fileB.php
$url = "http://example.com/fileA.php"
. "?from=fileB"
. "&token=" . sha1('fileB' . 'myaw3som3_salt!')
;
// then make the cURL request.
// fileA.php
if (sha1($_GET['from'] . 'myaw3som3_salt!') != $_GET['token']) {
die();
}
这是一个简单的例子,但你明白了。
答案 3 :(得分:0)
一旦您在服务器外请求,您实际上无法控制。如果另一台服务器上的fileA有可能使用中等文件B,则需要重新考虑您的安全模型。具体情况是什么?
答案 4 :(得分:0)
一种方法是检查
$_SERVER['HTTP_REFERER']
PHP中的变量,但是浏览器决定填充它,因此无法完全信任它。
答案 5 :(得分:0)
如果第三方有权访问fileB.php,则可以做的很少。 REFERER为您提供无保护。 REMOTE_ADDR并不像欺骗那样微不足道,这可能会让您确信请求是合法的。
答案 6 :(得分:0)
我认为nickf是现货,但只是为了扩展他的答案,这就是我要做的事情: