我可以只接受来自某些使用 Expressjs 请求域的流量吗?

Bra*_*rad 3 heroku node.js express

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

我试过的代码是

app.use((req, res, next) => {
  if (req.hostname === "example.com") {
    next();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

(我认为 IP 是一种可能性,但是流量来自的 IP 情况不时发生变化,我对此不了解。)

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

jfr*_*d00 7

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

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

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

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

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