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

时间:2015-11-22 13:44:28

标签: php jquery ajax api restful-authentication

我正在开发一个小型Restful API,它会在页面标题中显示用户当前的天气状况。将通过Ajax向服务器发送一个GET查询到类似这样的链接:

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

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

我遇到的问题是如何实现某种逻辑,如果通过test.com的ajax访问该页面,则输出为JSON。访问该链接的任何其他方式都会显示隐藏了JSON的空白或自定义页面?

另外,由于我不熟悉API和Ajax工作,我还需要了解其他任何安全方法吗?

我正在使用jQuery,php和mysql。

由于

2 个答案:

答案 0 :(得分:0)

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

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

根据this发现当使用'X-Requested-With:XMLHttpRequest'标头发送Ajax查询时。因此,如果我们寻找标题,我们可以找到如何对待它。但是,根据我的理解,这不会阻止潜在的耕作。

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

答案 1 :(得分:-1)

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

取自:PHP $_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME'], am I understanding the man pages correctly?

$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