Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保护JavaScript应用程序';什么是API调用?_Javascript_Api_Security - Fatal编程技术网

如何保护JavaScript应用程序';什么是API调用?

如何保护JavaScript应用程序';什么是API调用?,javascript,api,security,Javascript,Api,Security,我有一个JavaScript应用程序 它是用jQuery构建的 它使用$.get()从服务器中提取JSON数据,并使用数据加载拼图 我想将JavaScript应用程序分发给客户端,并使它们易于安装 我希望它能简单地给他们一个JavaScript块,他们可以把它放到他们的页面中,它将与我的API交互 我没有传递敏感数据,我的API保护数据库不受SQL注入的影响,等等 我只是想尝试阻止未经授权使用我的API,我想不出一种使用JavaScript的方法,因为任何拥有DOM检查器的人都可以从任何变量中获

我有一个JavaScript应用程序

它是用jQuery构建的

它使用
$.get()
从服务器中提取JSON数据,并使用数据加载拼图

我想将JavaScript应用程序分发给客户端,并使它们易于安装

我希望它能简单地给他们一个JavaScript块,他们可以把它放到他们的页面中,它将与我的API交互

我没有传递敏感数据,我的API保护数据库不受SQL注入的影响,等等

我只是想尝试阻止未经授权使用我的API,我想不出一种使用JavaScript的方法,因为任何拥有DOM检查器的人都可以从任何变量中获取任何凭据,或者可以监视任何服务器流量帖子或获取数据

是否可以在另一方验证推荐人

我知道那不是防弹的,但不是敏感数据。我只是想尽量减少未经授权的使用

有什么想法吗

注意:我知道混淆API键或其他东西是徒劳的,我想知道除了传统键之外,我还可以设置哪些控件来识别API的调用方。。我完全可以控制API本身,因此我可以在这方面做任何事情……

JavaScript身份验证有漏洞 使用JavaScript,几乎任何身份验证系统都会有漏洞,这仅仅是因为代码直接在浏览器中运行,任何人都可以看到(网络调用也是如此)。因此,根据你的情况,你可以尝试一些事情

IP白名单 如果您将此应用程序分发给一小部分客户机,并且您确切地知道他们将从何处访问它,那么您可以使用IP白名单。这确实是完全保护API的唯一方法。然而,这种方法非常麻烦,因为对于每一个新客户机,您都必须更新API白名单,并且考虑到您在这里谈论的内容可能不是您想要的(但我提到它只是因为它是一种可能性)

访问令牌 另一种方法是访问令牌。这是Facebook等网站常用的方法。有两种方法可以做到这一点。一种是给每个客户机一个密钥。每个人都可以拥有相同的密钥,但这不是很安全。为每个人提供不同的密钥不仅可以跟踪使用情况,还可以在必要时撤销访问权限

访问令牌的第一种方法是在JS客户机内部提供。但是,这意味着任何查看源代码的人都可以访问您的密钥,并使用它发出请求

第二种方法是将密钥存储在客户端运行的网站服务器上的某个位置。然后,该服务器可以使用该密钥进行服务器到服务器的调用,以获取临时会话令牌。人们仍然可以通过前端访问临时会话令牌,但他们必须首先访问此站点才能获得该令牌(这允许您将处理该令牌的责任转移给网站运营商),令牌最终将过期。然而,这意味着需要一些服务器端代码,应用程序将不仅仅是一个拖放的东西

对于上面给出的方法,您还可以研究以下内容,以避免重新发明轮子

白名单硬帽
使用IP的另一个可能的方法是设置一个硬上限,规定某个特定IP可以进入白名单的频率或每天多少。尽管您可能会遇到真正喜欢这些谜题的用户的问题,但这将防止一些潜在的滥用。

做其他API所做的事情-为用户分配某种形式的身份验证(如API密钥);不要硬编码库中的任何内容。他们会以某种方式将分配的API密钥放在页面上(可能是一个JS变量,将其传递给某个
init()
方法,等等),然后您会在您的API中对其进行身份验证。我希望避免在其端使用任何服务器端的东西,因为这需要对其进行额外的了解。我希望这是服务器技术不可知的。。此外,任何设置到客户端的API密钥都可以通过DOM检查器或traffic inspector进行刮取:(OAuth2.0是最好的选择)。