我有一个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?
发布于 2009-05-13 04:46:26
我认为您可能误解了JSON请求是从用户浏览器而不是从您自己的服务器启动的部分。静态HTML页面被传递到用户的浏览器,然后它反过来并在页面上执行Javascript代码。此代码打开到服务器的新连接,以获取JSON数据。从PHP脚本的角度来看,JSON请求来自外部世界的某个地方。
考虑到上面的机制,您无法阻止任何人在HTML页面上下文之外调用JSON。
发布于 2009-05-13 04:35:36
限制对域访问的常用方法是在内容前面加上无限运行的内容。
例如:
while(1);{"json": "here"} // google uses this method
for (;;);{"json": "here"} // facebook uses this method因此,当您通过XMLHttpRequest或仅限于您的域的任何其他方法获取它时,您知道需要解析出无限循环。但是如果它是通过脚本节点获取的:
<script src="http://some.server/secret_api?..."></script>它将失败,因为脚本永远不会超出第一个语句。
发布于 2009-05-13 05:51:26
在我看来,你不能限制访问,只会让它变得更难。有点像默默无闻的限制。引用者可以很容易伪造,即使是使用短命键,脚本也可以通过不断刷新键来获得响应。
那么,我们能做什么呢?
在这里找出弱点:
攻击者现在可以在一个循环中轻松地请求从1到1.000.000之间的所有用户信息。auto_increment is的缺点是它们的线性度,而且很容易猜测。
解决方案:为您的数据使用非数字唯一标识符。
你不能翻过那些。诚然,您仍然可以为各种类型的键解析HTML页面中的键,但是这种攻击是不同的(而且更容易避免)问题。
缺点:当然,您不能使用此方法来限制不依赖密钥的查询,例如搜索。
https://stackoverflow.com/questions/856045
复制相似问题