angular - 安全后端 API 到前端框架
问题描述
在我的公司,我们想使用一个 Javascript 框架(Vue/React/Angular) 目前我们正在比较所有框架,看看哪一个最适合我们的需求。
我们要做的是:
后端 API (C#) -> 框架(Vue/React/Angular)
为了保护我们的数据,我们需要一些安全性,所以不是每个人都可以请求我们的 API(有一些破解),我们的目标是您只能通过客户端(网站)访问 API。
但问题是我们应该如何在没有登录的情况下做到这一点?
我们调查了:
- CORS
- 节流
- reCAPTCHA V3(不在中国)
以上方法的组合可以工作,但这是我们能做的最好的吗?
解决方案
很遗憾地告诉您,绝对没有牢不可破的方法来限制仅从特定客户端访问您的 API。最后,您的 Javascript 客户端向 API 发出 HTTP 请求,这些请求可以在测试工具(甚至直接在 Chrome 中!)或其他自定义客户端中轻松捕获、研究和重新创建。
完全在用户控制下运行的 Javascript 客户端也可以由他们修改。缩小和混淆可以使这更难做到,但它不会阻止任何人有足够的动力。
本质上,忘记任何只涉及客户端的解决方案,因为它是不可信的。
这样就只剩下服务器端了。您已经给出的想法可以提供帮助,但要问的第一个问题(您没有提供谁的答案)是我们试图防范哪些特定风险?
例如,如果是服务器过载,那么节流主要解决了这个问题,您实际上不需要关心您自己的客户端是否真的发出请求。如果是其他问题,也许还有其他解决方案,但这些信息对于找到正确的解决方案至关重要。
附录
如果您不相信尝试控制客户端是没有意义的,请查看这个项目,该项目仅用于抓取网站和/或提供不同(更强大)的 API 来使用它们:https ://weboob.org/
如果您非常担心 API 会被滥用,这里有 2 种(不好的)缓解方法:
- 不要提供 API!仅在服务器上呈现 HTML。
- 每天左右更改 API 并推出一个新的 Javascript 客户端来处理它。
但是,这些都不能阻止网站从最终渲染的 DOM 中抓取,除非您也随时准备更改其结构。
推荐阅读
- mysql - 带有长脚本的 MYSQL 联合仅显示第一组脚本
- mysql - “中间一致性”事务失败
- java - 如何在我的自定义链表类中避免此 NullPointerException?
- mysql - 为什么我使用`union`后数据越来越少
- c++ - 在类对象的数组中搜索名称
- jq - 你能解释一下 jq 的 if then elif 和 else 语法吗?
- javascript - For 循环是否处理表达式内的函数直到循环结束?
- sql-server - SQL 首先将 COUNT 转换为 INT,然后对 COUNT 求和
- json - Bot Framework REST API 向具有一个对话 ID 的多个用户发送主动消息
- java - StampedLock 类的 tryOptimisticRead() 方法究竟是如何工作的?