网站全局设置中增加“XFF中最多地址数”选项

This commit is contained in:
GoEdgeLab
2024-05-06 14:05:12 +08:00
parent 8a81a4ef68
commit 4aef40c315

View File

@@ -1688,7 +1688,29 @@ func (this *HTTPRequest) setForwardHeaders(header http.Header) {
if ok && len(forwardedFor) > 0 { // already exists
_, hasForwardHeader := this.RawReq.Header["X-Forwarded-For"]
if hasForwardHeader {
header["X-Forwarded-For"] = []string{strings.Join(forwardedFor, ", ") + ", " + rawRemoteAddr}
// 限制转发的XFF中地址数量
if this.nodeConfig != nil && this.nodeConfig.GlobalServerConfig != nil && this.nodeConfig.GlobalServerConfig.HTTPAll.XFFMaxAddresses > 0 {
var maxForwardedAddresses = this.nodeConfig.GlobalServerConfig.HTTPAll.XFFMaxAddresses
if maxForwardedAddresses == 1 {
forwardedFor = nil
} else {
var forwardedAddresses []string
for _, forwardedHeader := range forwardedFor {
if len(forwardedHeader) > 0 {
forwardedAddresses = append(forwardedAddresses, strings.Split(forwardedHeader, ", ")...)
}
}
if len(forwardedAddresses) >= maxForwardedAddresses {
forwardedFor = []string{strings.Join(forwardedAddresses[:maxForwardedAddresses-1], ", ")}
}
}
}
if len(forwardedFor) > 0 {
header["X-Forwarded-For"] = []string{strings.Join(forwardedFor, ", ") + ", " + rawRemoteAddr}
} else {
header["X-Forwarded-For"] = []string{rawRemoteAddr}
}
}
} else {
var clientRemoteAddr = this.requestRemoteAddr(true)