首页 > 解决方案 > 设置只有您的网络服务器才能看到的 API

问题描述

所以我想让 nginx 为我的 react 应用程序提供服务,该应用程序使用一个设置为为我进行所有 API 调用的 API。我想这样做是为了保护我的 API 密钥和秘密。所以 API 服务器在端口 9001 上运行,我的反应应用程序正在对http://localhost:9001/api/v1/token. 它工作得很好。我遇到的问题是,如何阻止某人执行以下操作以获取令牌?

curl -X POST --header "referer: http://localhost:8081" -i http://localhost:8081/api/v1/token

谢谢

标签: node.jsreactjs

解决方案


如果您要问的是如何只允许您的反应应用程序使用您的 API 服务器,那么答案是您真的不能。

从浏览器发出的任何请求都必须发送到可以通过许多其他方式访问的服务器(例如您的 Curl 示例)。您不能只允许从您的 React 代码发出的请求,而不允许所有其他尝试与您的 API 服务器对话,因为在最低级别,这些都只是 http 请求。任何有决心的黑客都可以只看浏览器从你的 React 应用程序发送的内容,并发出一个看起来很像的 http 请求。这是 Web 浏览器中的应用程序如何工作的基本设计特征。

也就是说,您可以采取一些措施来“保护”您的 API 服务器免受滥用。

1. 需要某种形式的帐户或身份验证。 这至少需要黑客在您的系统中创建一个帐户并使用该帐户访问您的 API 服务器(稍后会详细介绍)。

2. 实施速率限制,以便个人帐户(根据上一步中的凭据检测)仅允许特定频率或模式或访问。至少,这可以保护您的 API 服务器不被一个不良行为者过度滥用。

3. 实施滥用控制。 如果某个特定帐户经常滥用 API 服务器(达到速率限制控制并且通常在您的 API 服务器上使用比任何合理的普通浏览器用户更多的资源),那么您可以禁止该帐户。

Google 地图等服务在努力保护其 API 服务器的完整性时实现了上述所有三个方面。


还有其他技术,例如将不断变化的令牌嵌入到网页中,然后每次后续调用 API 服务器都需要该令牌,但坚定的黑客只会从网页上抓取令牌,然后使用它直到它过期,所以这实际上只是黑客绕过的另一个障碍,而不是真正的障碍。


推荐阅读