2013-05-26 71 views
9

我想写一个谷歌Chrome扩展,它应该向我的网站发送请求并获取一些数据,所以,实际上我应该做一个像这里写的AJAX请求https://developer.chrome.com/extensions/xhr.html在Google Chrome扩展中保护代码

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://api.example.com/data.json", true); 

我想询问是否有办法以某种方式固定代码或阻止他人使用我的API,却因为其他用户可以看到扩展的源代码时,他们安装它,所以用我的API不我意识到这一点。

编辑:

如果我需要某种身份验证,比我如何可以验证使得AJAX调用之前用户?为了进行身份验证,我需要向我的服务器发送请求,但为此我应该发送,例如用户名和密码,应该保存在扩展文件的某个地方,实际上,用户可以在安装扩展时看到这些文件。

谢谢

+0

您在铬扩展中公开api - 并且您不希望扩展的其他用户使用它?那么api的含义是什么? – madflow

+1

你可以使用谷歌身份验证API来识别你的用户,并存储一些东西在你身边,以确保用户有权利。看到这个谷歌文档; http://developer.chrome.com/apps/app_identity.html – happy

+1

@madflow,如果我希望我的API只能被授权人使用,那该怎么办? – dav

回答

3

不要相信浏览器,请采取措施验证用户。因此,在这种情况下,您可能会要求您输入用于与服务器通信的密码。

您的Google扩展程序很简单,要求您在输入密码之后才会尝试使用AJAX与您的服务器通信。

请注意,您应该建立保护自己免受暴力攻击的手段。因此,如果密码错误密码超过一定数量,请锁定所有内容等。

您也可以考虑使用密码来简单地解密XHR的目的地,但如果你走这条路线,应该非常仔细地存储这个,因为这将是强力离线。

编辑 试图锁定的API,因此只有一个应用程序可以使用它是不实际也不技术上是可行的,所以你只能这样做的希望是使用API​​,对用户进行认证,无论他正在使用的访问软件。您可以让用户签署一份协议,该协议在法律上仅限于您的扩展,但我怀疑这会在很大程度上无法执行,并会耗费您的时间来追踪滥用者。

如果您不希望未经授权的人员知道API在哪里,您可以使用带外机制执行身份验证:通过电话,电子邮件,短信或简单的另一个API来授予用户请求API的密码或令牌必须附带。

在此带外过程中,您还可以授予用户唯一的URI(API访问点),该URI仅在每个已认证的会话中有效(例如,https://api.totally-cool-extension.com/api/ijyeDvB5dYvSiWG97OLuTAoNWwbhuZ0/)。对其他URI的任何请求都不起作用。但是,这在理论上与使用相同API访问点并且密码不错有很大不同。它只会改变您的架构中执行身份验证和/或授权检查的地点数量。

<aside>我的投票是将授权/认证点的数量尽可能减少,这样您就可以花更多时间在正确的位置获得一个位置,而不是有多个位置,并且可能存在多个逻辑缺陷或其他事物可能会导致漏洞。 </aside>

您还可以探索使用公钥基础结构和/或一次性密码方案或基于设备的令牌生成器等,但最终您会允许经过身份验证和授权的用户使用您的API。而且,由于互联网的缘故,这不会长久以来是一个未公开的URI。

而且,更重要的是,它不会阻止某人单独使用数据。即使采取了所有这些措施,授权用户在将数据流式传输到您的分机时收集这些数据也是微不足道的。或者,如果您采用点对点加密,他们可能会在您的代码中屏幕废弃或使用某种形式的JS内省,甚至从计算机内存中提取数据。

我知道你在这里寻找银弹,但它不存在。

+0

但我怎么能在进行ajax调用之前认证用户?对于身份验证,我需要向我的服务器发送请求,对吧?但为此我应该发送,例如用户名和密码,应该保存在扩展文件的某个地方,事实上,用户可以在安装扩展时看到它,对吗? – dav

+0

更新解决该问题的答案。 – mkoistinen

+0

谢谢@mkoistinen,你说得对,我正在寻找一颗银色的子弹,谢谢! – dav

2

我认为你做错了。你绝对不应该相信互联网用户PC上发生了什么。决不!

将信任线向内移动一步,公开您的API,然后设计您拥有完美控制的安全性 - 服务器端。

+0

但如果API是公开的,所以任何人都可以发送和获取数据,我如何在服务器端保护它?我想确保只有那些人可以使用api,比如说有一个密钥,但是如果我在扩展中添加了一个密钥,那么它是可见的并且不安全,谢谢! – dav

1

我不能让你的用例的正确方面

几点:

  • 您的扩展代码为always溯源(谁安装的扩展可以查看代码的任何一个)
  • 如果您正在寻找安全通过complicated or obfuscated coding patterns你最终放慢理解过程不是整体。
  • 如果您的目标是确保安装扩展程序的用户能够访问并禁用所有其他用户(谁获得了非法访问或下载和编辑的代码),则每次安装会话共享密钥

请进一步解释用例,以便我能更好地帮助您。

+0

我的目标是确保在创建扩展后,没有人可以在扩展中查看我的代码,以某种方式能够从其他网站向我的网站发出请求,或者创建其他类似的扩展名,并使用它向我发送请求网站,我的评论是否有意义?谢谢 – dav