Quando disinfettare l'indirizzo IP?

1

Sito web comune salva il tuo indirizzo IP mentre ti stai connettendo per visualizzarlo in una sezione di sicurezza in grado di visualizzarlo dall'utente o un amministratore.

Ho pensato che server come Apache, Nginx ... abbiano estratto l'indirizzo IP dal pacchetto IP ( REMOTE_ADDR ) e lo abbiano passato al programma CGI .

Tuttavia, di recente ho letto un articolo che dichiara di aver raggiunto self-XSS a causa della mancanza di una corretta sanificazione dell'indirizzo IP. Il ragazzo ha usato True-Client-IP per iniettare il suo carico utile, ma ho anche trovato alcune altre intestazioni come X-Forwarded-For .

  • Mentre la vera soluzione sarebbe quella di disinfettare automaticamente l'indirizzo IP prima di visualizzarlo, vorrei sapere quando dovremmo farlo davvero?
  • Esiste qualche configurazione in cui i server web modificano automaticamente REMOTE_ADDR sul valore di uno di questi intestazioni?
  • In che modo queste intestazioni sono comunque utili?
  • L'unica cosa che vedo è quando il client passa del proxy per una ragione non ovvia, ma desidera comunque che il sito web conosca il suo indirizzo IP. C'è altro?
posta Xavier59 11.02.2017 - 22:42
fonte

1 risposta

2

Non vedo problemi enormi che attivano un self-XSS poiché l'inserimento del contenuto in una connessione TCP esistente è già abbastanza difficile (grazie ai numeri di sequenza iniziali). E, anche se un utente malintenzionato fosse in grado di iniettare pacchetti TCP validi , probabilmente sarebbe più interessato a ottenere le informazioni sulla sessione direttamente sul suo IP, senza passare attraverso XSS.

Le cose cambiano leggermente quando il self-XSS è persistente. cioè termina memorizzato nel DB e può essere rieseguito in una fase successiva. In tal caso è più o meno un XSS completo , in quanto è possibile, ad esempio, consentire l'accesso al proprio account agli altri utenti che eseguiranno l'XSS. Ma non sanificare i dati forniti da un utente che entra nel DB dovrebbe essere un crimine.

Ancora, sulle domande:

While the true solution would be to automatically sanitize ip address before displaying it, i would like to know when should we really do it?

Non solo l'IP, ma ogni informazione fornita da una richiesta dell'utente. E non solo in casi specifici ma sempre. Se non disinfetti ogni informazione e la rimandi, o la lasci nel DB e la rispedisca più tardi, avrai problemi XSS.

Is there any configurations where webservers automatically change the REMOTE_ADDR to the value of one of this headers?

I server web non lo fanno (anche se alcuni hacking di nginx mi hanno permesso di eseguirlo, ma sarebbe stata una pratica orribile). I server Web passano le variabili al programma / script CGI. mod_cgi di Apache passa le cose attraverso le variabili d'ambiente e STDIN (per il contenuto POST). Nginx controlla le variabili presenti nella sua configurazione per andare al CGI attraverso il file scgi_params (normalmente a /etc/nginx/scgi_params ).

How are those headers useful anyway?

Vedi il mio rant-comment su akamai e True-Client-IP , cioè X-Forwarded-For è l'intestazione HTTP corretta. X-Forwarded-For è pensato per le connessioni che passano attraverso una qualche forma di proxy (al contrario di passare attraverso un NAT).

The only thing I'm seeing is when client pass by some proxy for un-obvious reason but still want the website to know his ip address. Is there any other?

E sì, questo è il principale e (non considerando possibili hack sporchi) usare solo per X-Forwarded-For . Potrebbe non essere molto utile ma è molto più comune di quanto immagini.

Gli uffici / datacenter hanno spesso enormi proxy / firewall a cui la loro rete interna passa attraverso Internet. Alcune macchine interne hanno IP privati e dipendono da un NAT, ma altre hanno i propri IP pubblici e dipendono dal firewall come proxy (il firewall deve essere in grado di essere in ogni modo efficace). Questa situazione richiede l'uso di "X-Forwarded-For" per sapere da quale parte della rete arriva una richiesta.

I proxy Internet (gratuiti e non liberi) spesso usano quell'intestazione per garantire che tu possa visitare siti web personalizzati per la tua posizione. per esempio. Connettersi direttamente a google.com Mi viene reindirizzato a google.co.uk (dal momento che vivo nel Regno Unito). Ma se uso un proxy in Polonia e non settaggio X-Forwarded-For , mi viene reindirizzato a google.com.pl . Se utilizzo il proxy e impostato X-Forwarded-For sul mio IP di casa (nel Regno Unito), viene correttamente reindirizzato a google.co.uk .

    
risposta data 11.02.2017 - 23:26
fonte

Leggi altre domande sui tag