Haproxy http 到 https 重定向主机头

问题描述 投票:0回答:2

我正在执行以下操作以将非 https 流量重定向到 https:

redirect scheme https code 301 if !{ ssl_fc }

效果很好,但是如果用户注入

Host
标头,他们将被重定向到该标头而不是 https 连接上的目标。

例如

Request: http://example.com
Host Header: maliciousexample.com

预期:

重定向到https://example.com

实际:

重定向到https://maliciousexample.com

是否可以用目标 URI 替换

Host
标头,否则,请检查
Host
标头是否是我配置的域?

haproxy
2个回答
0
投票

改用

http-request redirect location https://example.com code 301 if !{ ssl_fc }
并忘记恶意输入。
如果您关心请求 URI,那么您可以使用
capture.req.uri
http-request redirect location https://example.com%[capture.req.uri] code 301 if !{ ssl_fc }
.
如果您在一个前端有更多域,您还可以检查
Host
标头(但为什么要这样做?):

acl host_1 hdr(host) -i example1.com
acl host_2 hdr(host) -i example2.com
http-request redirect location https://example1.com if !{ ssl_fc } host_1
http-request redirect location https://example2.com if !{ ssl_fc } host_2

0
投票

我们最终在一个文件中做了一个域列表:

http-request allow  if { hdr_beg(host) -f /etc/haproxy/domains.cfg }
http-request deny

redirect scheme https code 301 if !{ ssl_fc }
© www.soinside.com 2019 - 2024. All rights reserved.