【问题标题】:Disallow direct URL access in node.js API endpoint禁止 node.js API 端点中的直接 URL 访问
【发布时间】:2017-08-12 13:27:28
【问题描述】:

我有一个 api 端点,但我希望它只能从某个网站访问。

api来自api.mydomain.com/v1/ 而只能访问该api的网站是mydomain.com。我已经实现了CORS,但是由于我的网站可以被公众访问,不需要登录,而且它是静态的,api是由ajax调用的,我没有添加令牌。如果用户将查看我的站点的源代码,他们将看到 api 端点。因此,如果他们浏览端点,他们可以直接访问数据。我希望我的域可以访问 url 端点,而不是直接访问它。如何在 node.js express 项目中做到这一点?

【问题讨论】:

  • express 模块cors 可以轻松将域列入白名单。
  • 您可以简单地使用post 请求而不是get 来获取数据。在应用程序中,您可以检查请求是否为post/get 并在获取时显示错误。由于您已经启用了 CORS,因此没有其他站点能够从端点获取数据。
  • 不会 cors 仍然允许在浏览器级别发送响应吗?响应标头将包含 Access-Control-Allow-Originsomedomain.comAccess-Control-Allow-Methods 中的任何内容,然后浏览器将停止执行/显示响应。如果您使用的是使用 http 客户端的程序,您仍然可以在那里看到完整的响应。
  • @Apoorv 我在所有 api 端点中都使用了post,但我仍然无法访问端点。我尝试使用http客户端测试,还是得到数据

标签: javascript node.js express


【解决方案1】:

看起来您需要添加某种 CSRF 保护,其中仅由mydomain.com 网页发出的所有 api 请求都将包含一些安全令牌(您或您正在使用的框架应该提供此安全令牌的实现)这个@ 987654321@ 可能会有所帮助

【讨论】:

  • 如何在渐进式网络应用中实现这一点?因为我正在构建的网站是 PWA
  • 我对 PWA 不是很了解,我认为如果 PWA 可用,您应该为 PWA 添加一个标签。但我可以告诉你,任何 Web 服务器都应该提供用于在身份验证时创建令牌的 API。找到那些 API。进一步了解 CSRF,以及您应该从服务器框架中获得什么样的 API。您可以关注 troyhunt.com/understanding-csrf-video-tutorial 以及 CSRF 的 wiki 页面。你也可以在 youtube 上找到很多视频。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多