api - 保护 Express API

标签 api security express jwt backend

我正在编写一个具有独立前端和后端的 Web 应用程序。前端是用 React 编写的,后端是运行 Express 端点的 node.js 服务器。如何确保只有我的前端可以访问 API,而不能访问其他任何人?我的 API URL 在我的前端客户端代码中公开,所以任何人都可以看到。

我在我的 API 中添加了 JWT 身份验证,但我仍然需要一个不 protected /login 端点来生成 JWT token ,并且为了登录以生成 token ,我必须从我的前端发布用户名和密码,这其他用户可以看到,因为它是从客户端完成的。

保护托管在像这样的单独后端上的 API 的正确方法是什么,以便只有我的前端可以访问它,而没有人可以看到正在使用哪些凭据来访问端点?

最佳答案

你不能。您的 API 在互联网上。任何人都可以访问它。在允许访问 API 之前,您可以要求该帐户的帐户和登录凭据,但是一旦有人拥有帐户和凭据,他们就可以从自己的脚本而不是通过您的网页访问 API。这就是网络的运作方式。你对此无能为力。客户端使用的凭据无法隐藏。客户端上的所有数据都可以被客户端上的黑客查看。这就是网络的方式。

较大的公司通常会监控他们的 API 使用情况以寻找不当使用。这包括速率限制、检测非普通人类用户典型的行为和序列。当他们检测到不当使用时,他们通常会暂时或永久禁用该操作或禁止违规帐户。这也是为什么一些页面使用技术来检测是否是真实的人单独引发了诸如 reCaptcha 之类的操作。例如,在堆栈溢出时,在编辑评论或帖子时,我经常遇到速率限制,它告诉我必须等待一段时间才能接受我的编辑。

没有绝对安全的方式在客户端中存储凭证。最常见的凭证方案是要求用户名和密码(通过 https 安全),然后当服务器接受它作为合法凭证时,向客户端发出某种 token ,可用于 future 的 API 调用。该 token 可能位于 cookie 中,或者可能需要手动包含在每个后续 API 调用中(使用来自浏览器的 API 时,cookie 的优点是 cookie 会随每个后续请求自动发送)。

如果 token 是 cookie,则 cookie 存储在浏览器的 cookie 存储中,并且可以为其设置过期时间。浏览器的 cookie 存储受到保护,不会被其他站点的网页访问,但可以被本地计算机上的某个人访问(它存储在文件系统中)。

如果 token 不是 cookie,只是作为 token 返回,并且客户端希望存储它,那么 Javascript 还可以访问其他一些地方来存储它。本地存储具有与 cookie 存储类似的安全性。它受到其他网站的访问保护,但可以被本地计算机上的人访问。

关于api - 保护 Express API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47298148/

相关文章:

security - 将 PHPmailer 设为 Gmail 的 "more secure app"

java - 主要对象是匿名 JAAS 安全性

javascript - Express、WS、WebSocket、Express-WS

c - 我没有从其他应用程序收到 WM_GETMINMAXINFO 消息

python - 500 内部服务器错误 : Python Bottle API

database - 为什么数据库在安装时需要单独的用户帐户?

node.js - 使用 IISNode 在 IIS 中托管 Nodejs 应用程序时如何启用静态文件(和较少的支持)

json - 可选的守卫语句在 swift 中为零

Android API 与 renderscript.type 类不一致

javascript - 启动时使用同步代码将数据加载到内存中可以吗?