Changeset 345 in code for trunk/server.go


Ignore:
Timestamp:
Jun 29, 2020, 4:33:23 PM (5 years ago)
Author:
contact
Message:

Only read X-Forwarded-* if remote address is loopback

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/server.go

    r344 r345  
    152152                return
    153153        }
     154
     155        isLoopback := false
     156        if host, _, err := net.SplitHostPort(req.RemoteAddr); err == nil {
     157                if ip := net.ParseIP(host); ip != nil {
     158                        isLoopback = ip.IsLoopback()
     159                }
     160        }
     161
     162        // Only trust X-Forwarded-* header fields if this is a loopback connection,
     163        // to prevent users from spoofing the remote address
    154164        remoteAddr := req.RemoteAddr
    155165        forwardedHost := req.Header.Get("X-Forwarded-For")
    156166        forwardedPort := req.Header.Get("X-Forwarded-Port")
    157         if forwardedHost != "" && forwardedPort != "" {
     167        if isLoopback && forwardedHost != "" && forwardedPort != "" {
    158168                remoteAddr = net.JoinHostPort(forwardedHost, forwardedPort)
    159169        }
     170
    160171        s.handle(newWebsocketIRCConn(conn), remoteAddr)
    161172}
Note: See TracChangeset for help on using the changeset viewer.