[tor-commits] [check/master] X-Forwarded-For can be a list.

arlo at torproject.org arlo at torproject.org
Tue Nov 19 19:47:14 UTC 2013


commit 4b0742641963e92fa528f573d0f2ffc8a832006b
Author: Arlo Breault <arlolra at gmail.com>
Date:   Tue Nov 19 11:44:07 2013 -0800

    X-Forwarded-For can be a list.
    
    Since the service is behind Apache, the remote IP is append to that
    header. However, if it has already be set, it becomes a list.
    
    This was reported in trac #10190.
---
 handlers.go |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/handlers.go b/handlers.go
index 9342ff8..f852a0a 100644
--- a/handlers.go
+++ b/handlers.go
@@ -12,6 +12,7 @@ import (
 	"regexp"
 	"strconv"
 	"time"
+	"strings"
 )
 
 // page model
@@ -44,7 +45,11 @@ func RootHandler(Layout *template.Template, Exits *Exits, domain *gettext.Domain
 
 		// get remote ip
 		host := r.Header.Get("X-Forwarded-For")
-		if len(host) == 0 {
+		if len(host) > 0 {
+			parts := strings.Split(host, ",")
+			// apache will append the remote address
+			host = strings.TrimSpace(parts[len(parts) - 1]) 
+		} else {
 			host, _, err = net.SplitHostPort(r.RemoteAddr)
 		}
 



More information about the tor-commits mailing list