【问题标题】:How to secure an ExpressJS RESTful API?如何保护 ExpressJS RESTful API?
【发布时间】:2020-12-12 01:05:20
【问题描述】:

我想知道是否可以保护只有 react 本机应用程序和 react 网站才能访问的 expressjs RESTful API。

例如,我的服务器在 8000 端口上运行,我的 react native 应用在 3000 端口上,我的网站在 5000 端口上。我希望服务器只监听来自这些端口的请求。

假设我有一条到 mydomain.com/signup 的 POST 路由,我不希望用户使用外部网站或 Postman 等工具发出该发布请求。

确保我的移动应用和网站是唯一允许访问我的 RESTful 路由的最佳方式是什么。

【问题讨论】:

    标签: node.js react-native api rest express


    【解决方案1】:

    首先,您对 API 请求的工作方式有些误解。当您在端口 3000 上的 react 应用程序在端口 8000 上向您的服务器发出请求时,它只是一个随机传入的请求。它不是来自端口 3000。实际上,传入端口号是随机生成的 5 位或 6 位端口。出站端口由 TCP 系统动态生成,您无法分辨它来自哪个“应用程序”。

    其次,您的 RESTful API 服务器只是互联网上的一个服务器。任何人都可以向它提出请求。使用跨源保护,您可以对可以从浏览器 Javascript 执行的操作提供一些限制(仅允许来自您特定域的网页的请求),但不能以这种方式阻止其他请求(不是来自浏览器的请求)。

    因此,使用浏览器以外的任何工具的任何代码骑师都可以将代码写入您的 API。像谷歌这样的人所做的是他们要求你要么有一个他们发给你的 APIKey,要么他们需要一些登录凭据(通常是来自以前的最终用户登录的 cookie)来识别发出请求的用户使用他们的许可用户系统。即使使用这些工具,这也只是意味着允许的用户正在访问 API,并不意味着只有您的应用程序正在访问 API。而且,事实上,你无法真正阻止这种情况。

    因此,大多数人所做的是他们需要登录或 APIKey 凭据,并跟踪 API 的使用类型。如果 API 的使用看起来合适(尤其是请求的类型和频率),那么这种使用是允许的。如果 API 的使用似乎不合适(通常在一段时间内请求过多),则可能会暂时或永久阻止该特定凭据或用户访问该服务。

    假设我有一条到 mydomain.com/signup 的 POST 路由,我不希望用户使用外部网站或 Postman 等工具发出该发布请求。

    您无法有效地做到这一点。您可以设置一些障碍使其变得更加困难,例如在您的网页中放置一个过期令牌并让您自己使用的 API 包含该令牌,然后检测它是否是一个有效的令牌,但一个坚定的黑客只会从网页,并且仍然可以通过他们想要的任何编程工具使用它访问您的 API。

    确保我的移动应用和网站是唯一允许访问我的 RESTful 路由的最佳方式是什么。

    你不能。您的 API 在网络上。任何拥有您所需凭据的人都可以访问它。

    【讨论】:

    • 非常感谢您的清晰解释!我非常感谢您为帮助我而付出的时间和精力。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2012-11-25
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2015-02-03
    • 2020-12-18
    相关资源
    最近更新 更多