首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护SPA背后的REST防止数据窃取

保护SPA背后的REST防止数据窃取
EN

Stack Overflow用户
提问于 2018-08-11 14:02:51
回答 1查看 2.5K关注 0票数 6

我正在为一个角度SPA编写REST Api网关,我面临着保护SPA API所暴露的数据免受“数据窃取”的问题。我知道我不能对HTML抓取做很多事情,但至少我不想提供这样的数据盗取用户体验和我们发送给SPA的JSON的全部功能。

关于这个主题,大多数“教程”和线程之间的区别在于,我将这些数据公开到一个公共网站(这意味着不需要用户身份验证),该网站提供了有关电子游戏的宝贵统计信息。

我关于如何保护SPA:的Rest的初步想法

到处都在使用JWT。当访问者打开网站时,SPA第一次从REST请求JWT并将其保存在HTTPS cookie中。对于所有请求,SPA必须使用JWT来获得响应。

采用这种方法的问题

  • 数据窃贼也可以简单地从我们的端点请求oauth令牌。我没有机会验证令牌实际上是从我的SPA还是从数据窃贼那里请求的?
  • 即使我解决了,攻击者也可以从HTTPS cookie中读取保存的JWT并在自己的应用程序中使用它。当然,我可以为JWT添加过期时间。

我的问题:

我的印象是,这是一个常见的问题,因此,我想知道是否有任何好的解决办法来保护其他人,而不是SPA可以直接接触我的REST Api反应?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-11 20:07:55

从API的角度来看,您的SPA与任何其他客户端都没有任何不同。你显然不能在SPA中包含一个秘密,因为它是发送给任何人的,不能被保护。另外,它对API的请求也可以被另一个客户端轻松地嗅探和复制。

因此,简单地说,正如在这里多次使用的那样,您不能对客户机应用程序进行身份验证。任何人只要愿意,都可以创建不同的客户端。

实际上,您可以做的一件事是检查请求的引用者/来源。如果客户端在浏览器中运行,它可以发出的请求在某种程度上是有限的,其中一个限制是引用程序和源标头,它们总是由浏览器控制,而不是javascript。所以你可以确保如果(而且只有当!)客户端正在未经修改的浏览器中运行,它是从您的域中下载的。这是浏览器中的默认设置,所以如果您没有发送CORS头,您已经这样做了(实际上是浏览器发送的)。然而,这并不能阻止攻击者构建和运行非浏览器客户端,伪造任何他喜欢的引用或来源,或者无视相同的来源策略。

您可以做的另一件事是定期更改API,以阻止流氓客户端工作(同时更改客户端ofc)。显然,这根本不是安全的,但对攻击者来说可能很烦人。如果下载所有数据一次是一个问题,这也没有任何帮助。

但是,一些你应该考虑的真实的事情是:

  • 有人真的想下载你的数据吗?它值多少钱?大多数情况下,没有人想要创建不同的客户端,也没有人对数据如此感兴趣。
  • 如果是这样的话,您至少应该实现用户身份验证,并通过下面的点和/或在您的合同中合法地覆盖剩余的风险。
  • 您可以实现节流以不允许批量下载。例如,如果典型用户每5秒访问1次记录,总共访问10次,则可以构建基于客户端IP的规则,例如,合理地限制用户访问。注意,虽然速率限制必须基于客户端不能任意修改的参数,而且没有身份验证,但这几乎是客户端IP,您将面临NAT背后的用户问题(即。例如,公司网络)。
  • 类似地,您可以实现监视,以发现某人下载的数据是否比正常或必要的多。但是,如果没有用户身份验证,您唯一的选择就是禁止客户端IP。因此,这又归结为知道谁是用户,即。身份验证。
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51800405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档