来自客户端访问API的AJAX请求的安全性

问题描述:

假设您希望第三方网站复制并粘贴您提供的JavaScript代码片段。此代码使用AJAX请求访问服务器上的JSON API。您如何实现安全性,以便在将API使用情况与注册并收到API密钥的网站相关联时,您将有效地禁止网站滥用其他网站的API密钥/使用情况?客户端无法实现这种安全性吗?该网站是否必须从服务器访问API?来自客户端访问API的AJAX请求的安全性

您可以检查window.location或其某些组件。

+0

所以之前哈希键你是说将AJAX请求中的window.location结果传递给我的服务器? –

+0

那么,由于跨域限制,您无法使用真正的AJAX。因此,通常情况下,网站会提供包装API(例如https://www.google.com/jsapi?key=INSERT-YOUR-KEY),它会执行JSONP调用。该脚本也可以查看'window.location'。然后,问题是网站是否尝试直接执行JSONP调用。 –

+0

是的,没有什么能阻止网站改变脚本,或者根据它看到其他网站制作JSONP调用的方式发送虚假信息...... –

我能想到的强制执行这种安全措施的唯一方法就是去IP地址,但充其量只是冒险,因为有很多原因会导致设计不好。

这将是服务器端保护javascript文件的安全性。您可以让Web服务提供JavaScript,以便在将文件发送到客户端之前进行检查。

+0

什么IP地址?您无法对客户端IP进行硬编码,因为您和第三方网站都不知道未来用户的IP。 –

+0

@MatthewFlaschen - 您需要知道的事实将是艰难的部分,为什么我认为这可能不是一个完美的解决方案,但这可能是最安全的方法。你在JavaScript中做的任何事情都可能被黑客入侵。 –

+0

@MatthewFlaschen - 获取API密钥的一部分可能是指出可能使用哪些IP地址,因此可以获取此信息。这不会阻止某人在浏览器中复制JavaScript文件并将其放在另一个网站上。我认为这种方法存在缺陷,因为JavaScript天生并不容易确保安全。 –

您还可以在服务器站点上检查请求的HTTP引用者。
我不认为改变JavaScript代码可以伪造它。
但它不能阻止有人从自定义浏览器或某个http客户端发送自定义软件包。

实现服务器端解决方案是可能的,但不是太难,但它会阻止许多网站使用您的脚本。
你可以让他们从自己的服务器
发送请求,或者让他们保持自己的服务器上的键,将其发送给客户(时间间隔后,哈希键改变)...