Jquery 阻止对API的外部调用(安全性)

Jquery 阻止对API的外部调用(安全性),jquery,ajax,json,security,api,Jquery,Ajax,Json,Security,Api,我必须为一个用jQueryAjax调用的网站实现一个内部API。它返回JSON上的数据 陷阱:它应该只在从同一个网站调用数据时抛出数据。我假设IP不会工作,因为它是在客户端用javascript调用的 例如,如果有人试图从另一个域调用json url,它应该抛出一条错误消息 有什么想法吗?一种可能足够的方法是在用户加载页面时从后端提供csrf令牌(密钥)。然后在执行ajax请求时传递该令牌,以确保用户使用来自服务器的网页。至少对于Django来说,内置了对csrf令牌的支持,对于其他框架可能也是

我必须为一个用jQueryAjax调用的网站实现一个内部API。它返回JSON上的数据

陷阱:它应该只在从同一个网站调用数据时抛出数据。我假设IP不会工作,因为它是在客户端用javascript调用的

例如,如果有人试图从另一个域调用json url,它应该抛出一条错误消息


有什么想法吗?

一种可能足够的方法是在用户加载页面时从后端提供csrf令牌(密钥)。然后在执行ajax请求时传递该令牌,以确保用户使用来自服务器的网页。至少对于Django来说,内置了对csrf令牌的支持,对于其他框架可能也是如此

注意:这并不会使您的数据/API访问更安全,但会使其他网站更难访问您的API。这不是正确身份验证的替代方案

链接:


长话短说:不可能。使用正确的身份验证,而不是没有身份验证:(这是一个带有结果的开放式表单。通过jQuery Ajax来避免重新加载页面。@andufo没有可靠的方法。但是,由于同源策略,普通的JSON调用无论如何都无法工作……但是任何想要访问您的数据的人都可以。抱歉,没有完全理解您的问题。我的回答很愚蠢,这是doesn没有完全的帮助,因为攻击者可以抓取您的页面获取CSRF令牌,然后查询。CSRF令牌是为了通过劫持用户的会话来防止对用户的攻击。它们不限制对API的访问。@derobert是的,但对于某些用例来说可能已经足够了。正如评论中提到的,没有可信的解决方案,就没有完美的解决方案至少这会阻止人们使用您的api进行mashup。对于某些用例来说,这可能已经足够了,但重要的是,任何阅读答案的人都要意识到它是多么容易被击败。IMO,在没有说明其已知(和实质性)的情况下给出安全建议是不负责任的弱点。@derobert我不理解这个问题是为了建立安全性。我以为他只是想防止其他使用API的网站滥用。无论如何,我在回答中添加了一个注释,以明确说明这一点。