首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制JSON访问?

问如何限制JSON访问?
EN

Stack Overflow用户
提问于 2009-05-13 04:19:22
回答 8查看 13.2K关注 0票数 32

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

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

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

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

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

EN

回答 8

Stack Overflow用户

发布于 2009-05-13 04:46:26

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

考虑到上面的机制,您无法阻止任何人在HTML页面上下文之外调用JSON。

票数 19
EN

Stack Overflow用户

发布于 2009-05-13 04:35:36

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

例如:

代码语言:javascript
复制
while(1);{"json": "here"} // google uses this method
for (;;);{"json": "here"} // facebook uses this method

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

代码语言:javascript
复制
<script src="http://some.server/secret_api?..."></script>

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

票数 18
EN

Stack Overflow用户

发布于 2009-05-13 05:51:26

在我看来,你不能限制访问,只会让它变得更难。有点像默默无闻的限制。引用者可以很容易伪造,即使是使用短命键,脚本也可以通过不断刷新键来获得响应。

那么,我们能做什么呢?

在这里找出弱点:

http://www.example.com/json/getUserInfo.php?id=443

攻击者现在可以在一个循环中轻松地请求从1到1.000.000之间的所有用户信息。auto_increment is的缺点是它们的线性度,而且很容易猜测。

解决方案:为您的数据使用非数字唯一标识符。

http://www.example.com/json/getUserInfo.php?userid=XijjP4ow

你不能翻过那些。诚然,您仍然可以为各种类型的键解析HTML页面中的键,但是这种攻击是不同的(而且更容易避免)问题。

缺点:当然,您不能使用此方法来限制不依赖密钥的查询,例如搜索。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/856045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档