根据 link 的访问方式控制 API 响应

Control API response based on how the link is accessed

我正在开发一个小型 Restful API,它将在页面 header 中向用户显示他们所在位置的当前天气状况。将有一个 GET 查询通过 Ajax 发送到服务器到一个 link 类似于:

https://test.com/weather/{required location}

Test.com 代表我的 link,它进一步查询数据库或外部 API。它以 JSON 响应,他们将看到他们所在位置的天气。我遇到的问题是,如果 link 被直接访问,它只会打印输出,因此它可能会被挖矿。

我的问题是,如果通过 ajax 从 test.com 访问页面,我如何实现某种逻辑,根据需要输出 JSON。任何其他访问 link 的方法都会显示一个空白或自定义页面,其中 JSON 已隐藏?

此外,由于我是 API 和 Ajax 工作的新手,我还需要注意其他安全措施吗?

我正在使用 jQuery、php 和 mysql。

谢谢

您可以根据允许的域名检查 $_SERVER['HTTP_HOST']。

取自:

$allowed_hosts = array('foo.example.com', 'bar.example.com');

if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) {
    header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
    exit;
}

这可能与以下内容重复: Prevent Direct Access To File Called By ajax Function

我自己找到了一个部分解决方案,使用 Dontfeedthecode 的利用 $_Server 变量的想法。合适的是 $_SERVER['HTTP_X_REQUESTED_WITH'].

if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    echo 'JSON RESPONSE HERE';
} else {
    echo 'ALTERNATIVE PAGE HERE';
}

根据this发现当Ajax查询是用'X-Requested-With: XMLHttpRequest'header发送的。因此,如果我们查找 header,我们可以找出如何处理它。但是,据我了解,这不会阻止潜在的耕作。

我将进一步调查 Dontfeedthecode 的回应,看看我是否可以让它对抗农业。