PHP ile Proxy sunucuları ile müşterilerine Algılama

7 Cevap php

Ben bir yöntem, ya da benim web sitesi görüntüleme proxy sunucusu herhangi bir türünü kullanarak müşterilerine algılamak için bir yol arıyorum. Bunu yapmak için en iyi yolu nedir ... PHP / Apache kullanıyorum? Herhangi bir proxy sunucusu, tespit edilmesi değil, özellikle bir ya da diğer gerekir.

Edit

Normal olanları kolayca 'HTTP_X_FORWARDED_FOR' arıyoruz tarafından tespit edilir gibi ben ... anonim vekiller daha çok ilgileniyorum.

Another Edit

Bu deneyin:

1) http://kproxy.com (veya herhangi bir diğer ücretsiz anonim proxy sitesine gidin)

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

3) Onlar: "Bir ağ hatası, bir XSLT stil yükleme oluştu: http://kproxy.com/new-hp/layout/layout.xsl yükleme hatası stylesheet" ile sayfa hataları gibi, bir şekilde engellemek mümkün

Ben vekiller önlemek için benzer bir şey yapmak istiyorum.

7 Cevap

Onlar explictly X-Forwarded-For falan gibi o söz özel başlıklarına geçmek sürece algılayamaz.

Bildiğim kadarıyla bir kara liste kullanmak zorunda. Onlar tam olarak normal kullanıcılar gibi davranmaya gibi macun Portforwarding, VPN veya diğer daha sofistike yöntemler kullanan kullanıcılar undetactable vardır.

Use the following 2 solutions in PHP. // methode 1 = quick but does not work with anonymous proxies

    $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 = geri kullanılan normal vekil limanlarda kökenli IP port taramalarına.

    $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!");
         }
     }

Metasploit doğrudan bağlantı (Flash, Java, QuickTime, MS Office, özel DNS sunucusu güvenlik açıkları / misfeatures) yapmak için müşterinin sistemini zorlamak için farklı teknikler çok kullanır.

Eğer Metasploit başlatmak için müşterinin tarayıcı alınamıyor Alternatif olarak, açık vekiller (port tarama) ve known Tor exit nodes aramak için deneyebilirsiniz.

But please don't assume that proxies are evil and need to be blocked – there are plenty of legitimate proxies and some users have to use them.

If you have trouble with spam or other abusive traffic then just blocking of proxies won't help much. You should look for specific solutions that address core of the problem (spam filters, IDS) rather than assuming anonymous = guilty.

Everything that the client passes to the server can be self-configured. You cannot trust anything, except for an IP address. So you cannot check the header data, if it's a proxy or a normal client.
By the way: It's the intention of a proxy not to show being a proxy :)

Emin için, isteyenin IP adresini alır ve bir vekil göndermek istiyorsunuz bir http istek gönderebilir. Bu tepki varsa, aksi takdirde, normal bir istemci olan bir vekil olabilir. Bu yöntem çok pahalı ve güvenilir olmayacaktır. Sunucu istenen vekil bir güvenlik duvarı arkasında olsaydı, hiçbir cevap olsun ve normal bir müşteri olduğunu düşünürdüm.

Ben burada ne oluyor JavaScript şey yüklemeye çalışıyor bazı istemci tarafı olduğunu düşünüyorum, ve bu sayfa bir çerçevenin içine baktı ediliyor "görebilir". Bu keşfetmek-gibi diğer cevaplar belirttiler daha verimli bir cadde olabilir, vekiller kasıtlı zor sadece tek başına sunucu belirlemek için yapmak.

Eski bir konu, ama ben bir şey anladım olabilir.

Benim sitede canlı ve ben onu çoğu için işe yarayabilecek düşünüyorum.

Benim sorunum yasaklandı kullanıcı geri siteme gelen ve bulabileceğiniz birçok vekiller birini kullanarak yeni bir e-posta adresi ile yeniden kayıt olmasıydı. Ben ne yaptım kayıt / giriş formunda basit bir jQuery çağrı:

<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>

Onun kaynak kodunda "new-hp/layout/layout.xsl" işaret eden bir adres vardır, çünkü bu web sitesi bu hatayı gösterir. Proxy IP gizlemek istiyor, bu yüzden onların sunucuya işaret edecek, http://kproxy.com/new-hp/layout/layout.xsl bunu değişiyor, ancak dosya gerçekten mevcut değil, yani Flash Eklentisi bulamıyorum.