【发布时间】:2021-01-17 22:10:27
【问题描述】:
我正在尝试做这样的事情:
$origin = $_SERVER['HTTP_ORIGIN'];
if (strpos($origin, "mydomain.com") > 0)
header('"Access-Control-Allow-Origin: http://' . $origin . '"');
我希望我们的任何子域 (*.mydomain.com) 能够使用这些页面,但阻止外部实体访问。但是,HTTP_ORIGIN 或 HTTP_REFERER 都不起作用(有一段时间没有使用它们,但它们曾经使用过)。我得到了错误
未定义索引:HTTP_ORIGIN
同样适用于 HTTP_REFERER。另外,我知道这两种方法都不安全,并且外部 URL 可能会被欺骗。
注意:我知道有些浏览器不支持这些,但这里不相关,因为不涉及浏览器。我在本地(在远程机器上)使用 curl 直接在服务器上调用页面(Apache2 和 PHP5.6)。
那么捕获调用脚本域的最佳替代方法是什么?
【问题讨论】:
-
忽略你的检查也匹配
xmydomain.com.evil.com这一事实,以及标题参数中无关的双引号,代码是有意义的。您只需检查 $_SERVER 中是否确实存在 HTTP_ORIGIN。 isset 可以做到。 -
您说得很好,但我可以改进检查。就 isset 而言,我已经知道 HTTP_ORIGIN 不存在,这就是我需要的替代方法。
-
别无选择。如果客户不告诉你,你不知道。这里的所有都是它的。当然,如果标头丢失,您可以简单地拒绝请求。
-
但它必须传递一个标头,因为我确实收到了 CORS 错误。还是我在这里误解了什么?
标签: php apache http-headers