2009-05-13 13 views
22

Sto cercando un metodo o un modo per rilevare i client utilizzando qualsiasi tipo di server proxy che visualizza il mio sito web. Sto usando PHP/Apache ... qual è il modo migliore per farlo? Qualsiasi server proxy dovrebbe essere rilevato, non specificamente uno o l'altro.Rileva i client con i server proxy tramite PHP

Modifica

io sono più interessato alle procure anonime ... come quelli normali sono facilmente rilevabili, cercando per HTTP_X_FORWARDED_FOR.

Un altro Modifica

Prova questo:

1) Vai http://kproxy.com (o qualsiasi altro sito di proxy anonimo gratuito)

2) visita: http://www.worldofwarcraft.com

3) sono in grado di bloccare in qualche modo, come la pagina errori con "Errore caricamento foglio di stile: si è verificato un errore di rete durante il caricamento di un foglio di stile XSLT: http://kproxy.com/new-hp/layout/layout.xsl"

Voglio fare qualcosa di simile per evitare i proxy.

+0

Quale intenzione avete? Si tratta di disabilitare la cache o altro? – guerda

+0

worldofwarcraft.com si carica bene tramite kproxy.com per me, manca solo il fogli di stile che è probabilmente dovuto al modo in cui vengono referenziati nell'html piuttosto che in qualche blocco del proxy. – cOle2

+0

Intendiamo bloccare i siti anonimi consentendo agli utenti di visualizzare il nostro sito web. In qualche modo, come accennato in precedenza, Blizzard è in grado di farlo usando un trucco di stile. – MichaelICE

risposta

15

Non è possibile rilevarlo a meno che non trasmettano intestazioni speciali che esplicitamente lo menzionano come X-Forwarded-For o qualcosa del genere.

Per quanto ne so, è necessario utilizzare una lista nera. Gli utenti che usano putty portforwarding, VPN o altri metodi più sofisticati non sono rilevabili in quanto si comportano esattamente come normali utenti.

+0

Sì, c'è un trucco che potrebbe essere fatto? Qualcosa non in grado di cache o in grado di inoltrare? – MichaelICE

+0

Non esiste un trucco del genere, tu come sviluppatore server non puoi vedere se mi connetto tramite una VPN (sì, questo è un proxy) o attraverso la mia vera connessione internet. I trucchi che menzioni bloccano solo determinati proxy anonimi basati sul Web, ma non quelli buoni che utilizzano un VPS con portforwarding di putty, ecc. – TomHastjarjanto

1

Tutto ciò che il client passa al server può essere auto-configurato. Non puoi fidarti di nulla, tranne che per un indirizzo IP. Quindi non è possibile controllare i dati dell'intestazione, se si tratta di un proxy o di un normale client.
A proposito: è l'intenzione di un proxy non mostrare di essere un proxy :)

Di sicuro, è possibile prendere l'indirizzo IP del richiedente e inviare una richiesta http che si invierà a un proxy. Se reagisce, potrebbe essere un proxy altrimenti, è un normale cliente. Questo metodo sarebbe molto costoso e non affidabile. Se il proxy richiesto dal tuo server fosse dietro un firewall, non riceverai risposta e penserai che si tratta di un normale client.

+0

Dai uno sguardo veloce all'esempio che ho modificato in "Another Edit". Alcuni come la tormenta è stata in grado di fare qualche trucco troppo ingannare il server proxy. – MichaelICE

1

Penso che quello che sta accadendo qui è che alcuni JavaScript sul lato client stanno cercando di caricare qualcosa, e che possono "vedere" che la pagina viene visualizzata all'interno di un frame. Potrebbe essere una strada più fruttuosa da esplorare - come hanno indicato altre risposte, i proxy rendono intenzionalmente difficile determinare solo dal server da solo.

7

Metasploit utilizza molte tecniche diverse per forzare il sistema del client a stabilire una connessione diretta (vulnerabilità/comportamenti errati in Flash, Java, QuickTime, MS Office, server DNS personalizzato).

In alternativa, se non è possibile richiamare il browser del client per eseguire metasploit, è possibile provare a cercare i proxy aperti (port scanning) e known Tor exit nodes.

Ma per favore non dare per scontato che i proxy siano malvagi e debbano essere bloccati - ci sono un sacco di proxy legittimi e alcuni utenti devono usarli.

In caso di problemi con lo spam o altro traffico illecito, il solo blocco dei proxy non sarà di grande aiuto. Dovresti cercare soluzioni specifiche che rispondano al nucleo del problema (filtri antispam, IDS) piuttosto che assumere anonimo = colpevole.

+5

+1 anonymouse! = Colpevole – walrii

-3

Sto usando il seguente, ma non sono sicuro che funzioni ogni volta. E 'solo un'idea :)

<?php 
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']); 
if ($host != $_SERVER['REMOTE_ADDR']) die('Proxy detected.'); 
?> 
+5

Questo fallirà per molti utenti, perché gethostaddr ritorna il più delle volte il nome utente e providername come: 5ED042DD.dynamic. .com – Codebeat

21

Utilizzare i seguenti 2 soluzioni in PHP. // Methode 1 = veloce ma non funziona con i proxy anonimi

$proxy_headers = array(
     'HTTP_VIA', 
     'HTTP_X_FORWARDED_FOR', 
     'HTTP_FORWARDED_FOR', 
     'HTTP_X_FORWARDED', 
     'HTTP_FORWARDED', 
     'HTTP_CLIENT_IP', 
     'HTTP_FORWARDED_FOR_IP', 
     'VIA', 
     'X_FORWARDED_FOR', 
     'FORWARDED_FOR', 
     'X_FORWARDED', 
     'FORWARDED', 
     'CLIENT_IP', 
     'FORWARDED_FOR_IP', 
     'HTTP_PROXY_CONNECTION' 
    ); 
    foreach($proxy_headers as $x){ 
     if (isset($_SERVER[$x])) die("You are using a proxy!"); 
    } 

// Methode 2 = PortScan a IP origine alle normali porte proxy utilizzato.

$ports = array(8080,80,81,1080,6588,8000,3128,553,554,4480); 
    foreach($ports as $port) { 
     if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errno, $errstr, 30)) { 
       die("You are using a proxy!"); 
     } 
    } 
+7

Scorro l'uso del secondo metodo - It spesso restituisce falsi positivi. Abbiamo riscontrato problemi con questo sul nostro sito quando si utilizzava lo script di rilevamento proxy di terze parti che utilizzava questo metodo. –

+3

Il secondo metodo, non solo ci vorrà molto tempo e non può essere implementato su siti web ad alto traffico, ma porterà anche un avviso anti virus ad alcuni dei visitatori! –

+0

HTTP_X_FORWARDED_FOR restituisce un postive errato usando la mia normale connessione diretta ad internet. – Sumedh

1

Vecchio argomento, ma avrei potuto capire qualcosa.

È in diretta sul mio sito e penso che potrebbe funzionare nella maggior parte dei casi.

Il mio problema era che l'utente bannato stava tornando al mio sito e si registra nuovamente con un nuovo indirizzo email utilizzando uno dei molti proxy che è possibile trovare. Quello che ho fatto è una semplice chiamata jQuery nel modulo di registrazione/login:

<form id="login_form" method="post" action="/#fake_login_url"> 
    stuff you need for the form 
</form> 
<script> 
    $('#login_form').attr('action','real_login_form'); 
</script> 
+0

Suppongo che questo rilevi solo proxy che eliminano JS dal traffico di rete? – sousdev

+1

la maggior parte dei proxy sostituisce l'URL per il post, l'esecuzione del JS lo riporterebbe alla normalità. Assicurati che il 'real_login_form' non sia un po 'in chiaro, IE:' var url =' ht '+' tp: '+' // '+' site '+'. Com '+'/url'' – Fabrizio

1

Questo sito dimostra questo errore perché ha nel suo codice sorgente di un indirizzo che punta a "new-hp/layout/layout.xsl" . Un proxy vuole nascondere l'ip, quindi lo sta cambiando in http://kproxy.com/new-hp/layout/layout.xsl, per puntare al proprio server, ma il file non è realmente esistente, quindi Flash Plugin non riesce a trovarlo.

2

Ci sono varie soluzioni a pagamento/gratuite. Molti di loro guardano l'IP del client che tenta di connettersi per determinare se sono su un proxy o meno.

Pagato:
Maxmind - Si concentrano sul rilevamento delle frodi e dispongono di una sottocategoria per il rilevamento dei proxy. Si noti che questo è ora considerato un servizio "legacy".

libero:
W I T C H - In grado di rilevare OpenVPN, cercando in valori MSS che sono unicamente identificabili. Il codice è disponibile su github.

GetIpIntel - Rilevamento proxy/VPN mediante apprendimento automatico, query tramite API.

Ci sono alcune altre opzioni gratuite elencate on security stack exchange.

+0

Tu può cercare "IP2Proxy" in Google. Vengono inoltre corrisposte soluzioni con indirizzi IP proxy aggiornati quotidianamente. –

+0

Ho appena eseguito alcuni test con IP2Proxy, non è molto preciso. Dalla mia esperienza, bloccato/maxmind funziona bene per soluzioni a pagamento, e getIPIntel è la migliore soluzione gratuita. –

+0

Un altro servizio di rilevamento proxy e VPN che vale la pena di aggiungere a questo elenco è IPQualityScore (https://www.ipqualityscore.com/). Hanno generosi piani gratuiti ea pagamento e il rilevamento proxy è molto accurato senza contrassegnare gli IP come falsi positivi. – Stas

0

Mi sento come rispondere a un thread di 8 anni è inutile, ma risponderò comunque per riferimento futuro.
Non conosco i proxy, ma la maggior parte delle VPN (se si va da loro) porterà una sorta di pagina di errore. se hai fatto qualcosa di simile ...

$cont = file_get_contents($_SERVER["REMOTE_ADDR"]); //the users ip 
$errormsg = "nginx"; 
if(strpos($cont, $errormsg)){ 
    die("No VPN's or Proxies Allowed"); 
} 

questo è molto semplice, si potrebbe ottenere una serie di messaggi di errore e di farlo in quel modo.
Questo non funzionerà se l'utente ha portforwarded la loro porta 80, ma non vedo perché la persona comune farebbe questo.

Problemi correlati