【问题标题】:Security back-end API to front-end framework安全后端 API 到前端框架
【发布时间】:2019-02-27 07:50:55
【问题描述】:

在我的公司,我们想使用 Javascript 框架(Vue/React/Angular) 目前我们正在比较所有框架,看看哪一个最适合我们的需求。

我们要做的是:

后端 API(C#) -> 框架(Vue/React/Angular)

为了保护我们的数据,我们需要一些安全性,所以不是每个人都可以请求我们的 API(有一些破解),我们的目标是您只能通过客户端(网站)访问 API。

但问题是我们应该如何在没有登录的情况下执行此操作?

我们调查了:

  • CORS
  • 节流
  • reCAPTCHA V3(不在中国)

上述方法的组合可以工作,但这是我们能做的最好的吗?

【问题讨论】:

  • 您甚至可以添加一个只有客户端和服务器知道的自定义令牌。
  • 为什么您的用户使用哪个客户端访问 API 很重要?如果他们的浏览器可以点击它,为什么不应该 curl 或 postman?
  • @jonrsharpe 为了防止数据被盗,数据是我们的核心业务。
  • 但是您描述的是相同的数据在没有登录的情况下出现在网站上。换句话说:为什么你更喜欢人们通过屏幕抓取你的网站而不是调用 API 来窃取你的数据?你似乎试图解决错误的问题。
  • 明白你的意思是你知道这是没有意义的,但你还是这样做了。最终这是你(/你公司的其他人)的决定,但它真的不应该被接受。在您概述的限制范围内没有技术解决方案,浏览器可以发出的任何请求也可以从其他 HTTP 客户端发出,因此请更改限制(例如在服务器上呈现,如下所示,或至少进行任何计算服务器端,因此只有标记绝对需要的内容才能通过网络传输,或添加身份验证 - 可能业务模型已损坏)。

标签: angular reactjs api vue.js frameworks


【解决方案1】:

很遗憾地告诉您,绝对没有牢不可破的方法来限制仅从特定客户端访问您的 API。最后,您的 Javascript 客户端向 API 发出 HTTP 请求,这些请求可以在测试工具(甚至直接在 Chrome 中!)或其他自定义客户端中轻松捕获、研究和重新创建。

完全在用户控制下运行的 Javascript 客户端也可以由他们修改。缩小和混淆可以使这更难做到,但它不会阻止任何人有足够的动力。

基本上,忘记任何只涉及客户端的解决方案,因为它不受信任。

这样就只剩下服务器端了。您已经给出的想法可能会有所帮助,但要问的第一个问题(您没有提供谁的答案)是我们试图防范哪些特定风险?

例如,如果是服务器过载,那么节流主要解决了这个问题,您实际上不需要关心您自己的客户端是否真的发出请求。如果是其他问题,也许还有其他解决方案,但这些信息对于找到正确的解决方案至关重要。

附录

如果您不相信尝试控制客户端是没有意义的,请查看这个项目,该项目仅用于抓取网站和/或提供不同(更强大)的 API 来使用它们:https://weboob.org/

如果您非常担心 API 会被滥用,这里有 2 种(不好的)缓解方法:

  • 不提供 API!仅在服务器上呈现 HTML。
  • 每天左右更换 API 并推出新的 Javascript 客户端来处理它。

但是,除非您随时准备更改其结构,否则这些都不能阻止网站从最终渲染的 DOM 中抓取。

【讨论】:

  • 我们试图防范哪些特定风险?我们试图让坏人更难窃取我们的数据,并用我们的数据创建他们自己的网站。数据是我们的核心业务,但该网站需要消费者无需登录即可访问。
  • @MattB 添加了更多信息
  • 我在服务器端渲染建议的基础上投了赞成票;如果这是一个如此令人担忧的问题,为什么要构建一个 SPA 并公开一个 API?
【解决方案2】:

Hiding client side API calls有点关系

你可以做什么: https://en.wikipedia.org/wiki/Obfuscation_(software) https://obfuscator.io/ https://blog.jscrambler.com/how-to-protect-your-vue-js-application-with-jscrambler/

获取这些请求会更难,但仍然 - 每个人都可以调用您的 API 服务器,这将需要更多时间。

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    相关资源
    最近更新 更多