我正在执行以下操作以将非 https 流量重定向到 https:
redirect scheme https code 301 if !{ ssl_fc }
效果很好,但是如果用户注入
Host
标头,他们将被重定向到该标头而不是 https 连接上的目标。
例如
Request: http://example.com
Host Header: maliciousexample.com
预期:
实际:
重定向到https://maliciousexample.com
是否可以用目标 URI 替换
Host
标头,否则,请检查 Host
标头是否是我配置的域?
改用
http-request redirect location https://example.com code 301 if !{ ssl_fc }
并忘记恶意输入。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
我们最终在一个文件中做了一个域列表:
http-request allow if { hdr_beg(host) -f /etc/haproxy/domains.cfg }
http-request deny
redirect scheme https code 301 if !{ ssl_fc }