浏览器扩展:如何保护API调用

时间:2016-08-15 14:14:26

标签: google-chrome-extension firefox-addon api-design

我正在开发一个浏览器扩展,它应该与我的MEAN服务器( - > node.js)交换(GET和POST)数据。我想知道如何保护服务器端API路由,以避免DDOS攻击和绕过我的扩展并直接通过恶意软件/服务器/个人发送/请求数据而产生的类似威胁。

我打算使用几个必须包含在每个调用中的令牌(通过HTTPS连接进行GET / POST):

  • 静态扩展ID哈希,在我的扩展名中无形硬编码,在服务器端列入白名单,例如ext_id:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

  • 限制在给定时间段内每个用户/分机的请求数量

  • 哈希和盐渍用户凭据(由用户通过扩展首选项内的输入字段提供并在本地存储),如用户名:e3b0c44298fc1c149 [...],密码:da39a3ee5e6b4b0d3255bfe [...]

我希望这个领域的经验丰富的专家能够批准或加强这种方法,甚至可能提出合理的替代方案。

2 个答案:

答案 0 :(得分:0)

目标是能够快速丢弃无效请求。您获得的最高投资回报是通过缓存和逐步延迟。

也就是说,您可以做的一件事就是对每个请求散列或加密一个值,并结合时间戳。这意味着客户端发出的每个请求都将具有基于提交时间的唯一值,因此他们所做的每个请求都必须是唯一的。这还为用户提供了一些额外的安全性,以防止重放攻击。

答案 1 :(得分:0)

  

为了避免DDOS攻击

API级别限制有助于防止利用缓慢(资源密集型)API的DoS攻击。对于这种情况,简单的登录要求和每用户速率限制就足够了。

它们对于简单地破坏网络连接,内核资源(TCP连接)或攻击TLS层(加密握手)或应用程序的网络IO部分的攻击毫无用处。

  

因绕过我的扩展并直接通过恶意软件/服务器/个人发送/请求数据而产生。

     

[...] ID哈希,在我的扩展名

中无形硬编码

基本上,你在那里计划的是不可能的。浏览器使用开放协议并且可以调试。扩展程序发送的任何内容都可以由脚本复制。

试图以某种方式使扩展变得特别,它不能被外部软件复制,你基本上要求发明坚不可摧的DRM。