我是否只能通过Expressjs接受来自某些请求域的流量?

时间:2018-01-24 17:29:53

标签: node.js express heroku

我希望能够只让来自特定域的请求成功地通过heroku上的节点应用程序提供服务。

我尝试的代码是

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

原来req.hostname似乎是我的heroku appserver的名字......我已经查看了req对象的快速文档,但没有看到其他任何有希望的东西。

(我看到IP是一种可能性,但流量来自的IP情况会不时发生变化,我不在循环中。)

我觉得请求的范围必须在某个地方...但也许我想要的东西是不可能的。

1 个答案:

答案 0 :(得分:2)

accept a request from example.com是你搞砸事情的地方。该请求不是来自example.com。该请求来自某个显示他们从example.com获得的网页的个人计算机。互联网上的任何人都可以加载和运行相同的网页。

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

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

  1. 使用某种身份验证方案(要求用户输入凭据到"登录")。这可以是您自己的身份验证方案,也可以依赖其他现有的身份验证方案。
  2. 仅从特定客户端IP地址或IP地址范围对您的服务器进行白名单访问。这种情况并不经常使用,因为它有各种各样的限制。
  3. 仅供参考,只要您的服务器不允许跨源请求(默认情况下不会这样),那么其他一些网站就无法通过浏览器访问您的服务器(浏览器会阻止它)。但是,任何脚本迷或黑客仍然可以。只有身份验证或IP过滤才能阻止黑客访问您的服务。