修复 #3494
[expressjs/express]req.hostname:检查第一个逗号分隔的主机
回答
我们(Deliveroo)最近遇到了这个问题。我们目前正在解决这个问题,但如果能合并/发布就更好了。我们能做些什么来帮忙吗?
计划将其合并到下一个次要版本中。自 1 月 1 日起,我们目前正在处理 3 份不同的安全报告,这就是我们的带宽所在,因为我们正在尝试尽快解决安全问题。我希望这是合理的。根据安全更新是否需要新的次要版本,下一个次要版本应该在 2 月中旬发布。
有人能给我一个将其定义为有效的规范链接吗?我看不到任何关于允许使用多个主机值的内容:
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23 https://tools.ietf.org/html/rfc7230#section-5.4
因此,这是针对标头的X-Forwarded-Host
,不同于Host
。不幸的是,X-Forwarded-Host
标头没有规范,并且是临时的,但是这些转发代理正在实现它们。它们总是只使用一个值,突然出现多个报告,似乎有一些新的转发软件在标头中添加了多个值。
根据安全更新是否需要新的小版本,下一个小版本应该在 2 月中旬发布。
听起来很合理。谢谢?
哦,我看错了代码更改,我的错。我仍然不确定我们应该在这里支持什么。标Forwarded
头是未来使用的规范,从技术上讲,任何用户都可以在中定义自己的值X-Forwarded-Host
。在 nginx 配置中,我看到的基本方式如下:
proxy_set_header X-Forwarded-Host $host;
但是在这样的配置中,他们也可以这样写:
proxy_set_header X-Forwarded-Host my-server.com,$host;
而且,如果没有规范,我不确定我们是否应该在做这些事情之前,在没有一些非常流行的反向代理(如 nginx 或 HAproxy)文档的情况下定制我们的支持,因为一旦我们添加它们,我们就必须支持它们
我认为原始问题表明它在某种程度上发生在 Openshift 上。但是,是的,也许至少获取产品文档的链接可能会有用。
我正在努力清理这个拉取请求,以便在 4.17 中实现。~特别是,这个 PR 中添加的测试实际上在没有修复的情况下通过了当前主控,因此看起来测试实际上并没有验证此处所做的更改。我认为这是因为req.hostname
不包括端口号,而且由于测试是第一个带有端口号的元素,所以它无论如何都会切断其余部分。~编辑没关系。
我只是在 PR 中添加了一些测试并合并了。