如何限制 JSON 访问?

2022-08-30 14:16:51

我有一个从新创建的JSON API中提取数据的Web应用程序。

我的静态HTML页面通过JavaScript从静态HTML页面动态调用JSON API。

如何限制对我的 JSON API 的访问,以便只有我(我的网站)可以从中调用?

如果它有帮助,我的API是这样的:http://example.com/json/?var1=x&var2=y&var3=z...这会根据查询生成相应的 JSON。

我正在使用PHP来生成我的JSON结果...限制对 JSON API 的访问是否可以像检查 一样简单,以确保 API 仅从我的域调用,而不是从远程用户调用?$_SERVER['HTTP_REFERER']


答案 1

我认为您可能误解了从用户的浏览器而不是从您自己的服务器启动JSON请求的部分。静态HTML页面被传递到用户的浏览器,然后它转过身来并在页面上执行Javascript代码。此代码将打开一个返回到服务器的新连接,以获取 JSON 数据。从PHP脚本的角度来看,JSON请求来自外部世界的某个地方。

鉴于上述机制,您无法采取太多措施来防止任何人在HTML页面的上下文之外调用JSON API。


答案 2

限制对域的访问的常用方法是在内容前面附加无限运行的内容。

例如:

while(1);{"json": "here"} // google uses this method
for (;;);{"json": "here"} // facebook uses this method

因此,当您通过 XMLHttpRequest 或任何其他仅限于您的域的方法获取此内容时,您知道您需要解析无限循环。但是,如果它是通过脚本节点获取的:

<script src="http://some.server/secret_api?..."></script>

它将失败,因为脚本永远不会超出第一个语句。


推荐