我正在开发一个小型Restful API,它会在页面标题中显示用户当前的天气状况。将通过Ajax向服务器发送一个GET查询到类似这样的链接:
https://test.com/weather/{required location}
Test.com代表我的链接,它进一步查询数据库或外部API。它以JSON响应,他们将看到他们所在位置的天气。我遇到的问题是如果直接访问该链接,它只打印输出,因此可能会进行养殖。
我遇到的问题是如何实现某种逻辑,如果通过test.com的ajax访问该页面,则输出为JSON。访问该链接的任何其他方式都会显示隐藏了JSON的空白或自定义页面?
另外,由于我不熟悉API和Ajax工作,我还需要了解其他任何安全方法吗?
我正在使用jQuery,php和mysql。
由于
答案 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