我想写一个google chrome扩展程序,它应该向我的网站发送请求以发送并获取一些数据,所以,实际上我应该做一个像这里写的ajax请求https://developer.chrome.com/extensions/xhr.html
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.example.com/data.json", true);
我想问一下是否有办法以某种方式保护代码或阻止他人使用我的api,因为实际上其他用户在安装时可以看到扩展的源代码,所以在我不知道的情况下使用我的api它的。
修改
如果我需要进行某种身份验证,那么在进行ajax调用之前如何对用户进行身份验证?为了进行身份验证,我需要向我的服务器发送请求,但为此我应该发送,例如用户名和密码,应保存在扩展程序文件中的某个位置,实际上,当用户安装扩展程序时,用户可以看到这些文件。
由于
答案 0 :(得分:3)
不要相信浏览器,而是采取措施来验证用户。因此,在这种情况下,您可以要求输入用于与服务器通信的密码。
您的Google扩展程序很容易要求您在尝试使用AJAX与服务器通信之前输入密码。
请注意,您应该建立保护自己免受暴力攻击的手段。因此,如果存在少量错误密码等,请执行诸如锁定所有内容等操作。
你也可以考虑使用密码简单地解密XHR的目的地,但是如果你走这条路线,你应该非常小心地存储它,因为这将是强制离线的。
修改强> 尝试锁定API以便只有一个应用程序可以使用它在技术上是不切实际的,因此您只希望这样做是使用API对用户进行身份验证,而不管他使用的访问软件。您可以让用户签署一份协议,合法地将他们限制为仅限您的分机,但我怀疑这将大部分无法执行,并且会耗费您跟踪滥用者的时间。
如果您不希望未经授权的人员知道API的位置,您可以使用带外机制执行身份验证:通过电话,电子邮件,短信或简单地授予用户的另一个API请求API的密码或令牌必须附带。
在此带外过程中,您还可以向用户授予唯一的URI(API访问点),该URI仅对每个经过身份验证的会话(https://api.totally-cool-extension.com/api/ijyeDvB5dYvSiWG97OLuTAoNWwbhuZ0/有效)有效。对OTHER服务器的任何请求都不起作用。但是,这在理论上与使用相同的API访问点并拥有良好的密码并没有太大的不同。它只是更改架构中将执行身份验证和/或授权检查的位置数。
<aside>
我的投票是将授权/认证点的数量减少到尽可能少,以便您可以花更多的时间来确保一个地方正确,而不是有多个地方,可能还有多个逻辑缺陷或其他可能导致漏洞的事情。</aside>
您还可以使用公钥基础结构和/或一次性密码方案或基于设备的令牌生成器等进行探索,但最终,您将允许经过身份验证和授权的用户使用您的API。并且,由于互联网,这将不会长期保持未公开的URI。
更重要的是,它不会阻止某人自己使用这些数据。即使采取了所有这些措施,授权用户在将数据流式传输到您的分机时收集这些数据也是微不足道的。或者,如果您采用点对点加密,他们可以屏蔽或在您的代码上使用某种形式的JS内省,甚至从计算机的内存中提取数据。
我知道你在这里寻找一颗银弹,但它不存在。
答案 1 :(得分:2)
我认为你做错了。你永远不应该相信互联网用户PC上发生的事情。从未!
将信任线向内移动一步,将您的API公之于众,然后设计完全控制的安全性 - 服务器端。
答案 2 :(得分:1)
我无法获得用例的正确方面
几点:
always
可追踪(已安装扩展程序的任何人都可以查看该代码)complicated or obfuscated coding patterns
寻找安全措施,那么最终您的理解过程会慢下来。请解释进一步的用例,以便我能更好地帮助您。