【问题标题】:Can I only accept traffic from certain requesting domains with Expressjs?我只能接受来自某些使用 Expressjs 的请求域的流量吗?
【发布时间】:2018-01-24 17:29:52
【问题描述】:

我希望能够只让来自非常特定域的请求由我在 heroku 上的节点应用程序成功处理。

我试过的代码是

app.use((req, res, next) => {
  if (req.hostname === "example.com") {
    next();
    }
});

原来 req.hostname 似乎是我的 heroku 应用服务器的名称...我查看了 req 对象的快速文档,但没有看到任何其他有希望的东西。

(我认为 IP 是一种可能性,但流量来自的 IP 情况会不时发生变化,而我不在这方面的循环中。)

我觉得请求的域必须在某个地方......但也许我想要的不可能。

【问题讨论】:

  • 浏览器流量“来自”用户的计算机,而不是来自域。不知道你在这里的意思。
  • 好的。我有一些从这个节点应用程序获取 json 的 jQuery。所有的请求都来自校园内的一个系统,我希望锁定应用程序只接受来自该系统的请求
  • 你为什么不使用一些你只与那个系统共享的密码呢? “请求域”是什么意思?
  • 我没有正确使用术语,这并不让我感到惊讶,我的错。因此,如果我的客户端代码位于 www.example.com/funstuff.html 页面上,我希望明确接受来自 example.com 的请求
  • 密码在这种情况下不起作用,因为该页面是供公众使用的。我的节点应用程序正在使用第 3 方 api,我只是想知道是否可以通过仅允许来自特定位置的请求来保持他们的数据更安全。这不是一个严格的要求,但我认为这可能很容易做到并且值得。

标签: node.js express heroku


【解决方案1】:

accept a request from example.com 是你搞砸的地方。该请求并非来自 example.com。该请求来自某些正在显示从 example.com 获得的网页的个人计算机。互联网上的任何人都可以加载和运行同一个网页。

身份验证通常是您限制谁可以访问什么的方式。您要求用户输入某种形式的凭据。您可以通过客户端 IP 限制访问(有各种限制),但您已经表明您认为这不会起作用。

限制谁可以访问您的服务器功能的常用方案是:

  1. 使用某种身份验证方案(要求用户输入凭据以“登录”)。这可以是您自己的身份验证方案,也可以搭载其他一些现有的身份验证方案。
  2. 仅将特定客户端 IP 地址或 IP 地址范围对您的服务器的访问列入白名单。这并不经常使用,因为它有各种限制。

仅供参考,只要您的服务器不允许跨源请求(默认情况下不允许),那么其他一些网站就无法通过浏览器访问您的服务器(浏览器会阻止它)。但是,任何脚本迷或黑客仍然可以。只有身份验证或 IP 过滤才能防止黑客访问您的服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 2020-12-20
    • 2010-09-21
    • 2012-09-04
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多