[PHP] Proxy gebruik detecteren

Pagina: 1
Acties:
  • 1.006 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Ik heb me de laatste tijd een klein beetje verdiept in proxies, of eigenlijk meer het detecteren van het gebruik ervan. Ik heb nauwelijks verstand van PHP, maar mijn verhaal bevat PHP elementen en dus hoop ik dat het topic hier toch bestaansrecht heeft.

Goed, ik zou dus graag willen weten hoe het gebruik van een publiekelijk toegankelijke, anonieme proxy te detecteren is. Bij een gewone anonieme proxy lijkt dat eenvoudig: met HTTP_X_FORWARDED_FOR, HTTP_VIA en/of HTTP_PROXY_CONNECTION zou dat in theorie mogelijk moeten zijn. Bij high anonimity proxies echter, worden die variabelen niet meegezonden en wordt het hele verhaal al een stuk moeilijker. In een ander topic hierover las ik dat een manier zou zijn om een connectie te maken met het betreffende IP om te zien of het een proxy is. Maar, hoe doe je dat, en hoe verwerk je dat in een PHP script?

Ik heb een voorbeeld van een IP dat een proxy is, als ik daar op nmap krijg ik te zien dat poort 3128 open is, en poort 8080 filtered. Poort 3128 is de poort die door squid wordt gebruikt als ik me niet vergis, hoe zit dat bij andere proxies? Of eigenlijk beter gezegd, is poort 8080 niet degene die ik eigenlijk wil hebben in m'n mini-onderzoekje van een IP? In weer een ander topic las ik dat provider-proxies geen 8080-connecties toelaten van buitenaf, maar dat bezwaar is in mijn geval geen bezwaar omdat een providerproxy geen vrij toegankelijke, anonieme proxy is.

Kortom is mijn vraag: naast de hierboven genoemde variabelen lijkt een goede manier om te bepalen of een IP adres een open, anonieme proxy is om verbinding te maken met het IP op een bepaalde poort. Hoe doe je dat in PHP, of in ieder geval hoe lees je het resultaat uit door middel van PHP, en is dit een juiste manier?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Voor zover ik weet is er niet echt een betrouwbare manier om te zien of iemand via een proxy surft. Ook de headers die jij uitleest hebben haken en ogen. Kun je er verder trouwens niet vanuit gaan dat het ontbreken van alle headers die je noemt, en de REMOTE_ADDR header, betekent dat de gebruiker via een proxy op je site zit?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Kun je er verder trouwens niet vanuit gaan dat het ontbreken van alle headers die je noemt, en de REMOTE_ADDR header, betekent dat de gebruiker via een proxy op je site zit?
Voor zover ik weet ontbreekt REMOTE_ADDR alleen wanneer een PHP-script vanuit de shell wordt uitgevoerd.

Als de detectie niet vaak plaats hoeft te vinden (bijvoorbeeld alleen bij registratie), kun je overwegen snel wat bekende poorten (80, 8080, 3128, 1080) te scannen met fsockopen om te kijken of die proxyrequests accepten. Een alternatief is een snelle Google-zoekactie op het IP in combinatie met het woord 'proxy' of '8080' oid.

[ Voor 5% gewijzigd door GlowMouse op 23-07-2005 01:34 . Reden: overbodige opmaakcode verwijderd ]


Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
GlowMouse schreef op zaterdag 23 juli 2005 @ 01:32:

Als de detectie niet vaak plaats hoeft te vinden (bijvoorbeeld alleen bij registratie), kun je overwegen snel wat bekende poorten (80, 8080, 3128, 1080) te scannen met fsockopen om te kijken of die proxyrequests accepten. Een alternatief is een snelle Google-zoekactie op het IP in combinatie met het woord 'proxy' of '8080' oid.
Ik denk zelf dat checken bij registratie inderdaad afdoende is, dan zou fsockopen dus een goede optie zijn. Maar als iemand op dat IP ook een webserver draait is een open poort 80 niet voldoende toch? Of is er een manier om specifiek op een proxy verbinding te checken?

Acties:
  • 0 Henk 'm!

  • rveck
  • Registratie: Juli 2005
  • Laatst online: 18-09 22:31
Het gebruik van een methode is afhankelijk van het doel wat bereikt wenst te worden.

De detectiemethode met Nmap is in ieder geval niet waterdicht.
Meerdere voorbeelden kan ik bedenken waarbij deze methode niet aantoont dat er een proxy server gebruikt wordt terwijl dit wel zeker het geval is.

Misschien kun je inzicht geven in het doel wat je wil bereiken?

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
rveck schreef op zaterdag 23 juli 2005 @ 14:49:
Het gebruik van een methode is afhankelijk van het doel wat bereikt wenst te worden.

De detectiemethode met Nmap is in ieder geval niet waterdicht.
Meerdere voorbeelden kan ik bedenken waarbij deze methode niet aantoont dat er een proxy server gebruikt wordt terwijl dit wel zeker het geval is.

Misschien kun je inzicht geven in het doel wat je wil bereiken?
Het zoveel mogelijk onmogelijk maken te registreren bij een online community door mensen die op dat moment gebruik maken van een anonieme proxy.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
TripleM schreef op zaterdag 23 juli 2005 @ 14:26:
[...]

Ik denk zelf dat checken bij registratie inderdaad afdoende is, dan zou fsockopen dus een goede optie zijn. Maar als iemand op dat IP ook een webserver draait is een open poort 80 niet voldoende toch? Of is er een manier om specifiek op een proxy verbinding te checken?
Hoe hard wil je het hebben??? Poort 80 zou ik meer zien als een www-server ( Je kan er wel een proxy request naartoe sturen en dan kijken of je http terug krijgt, maarja dan zit je weer met proxies met authorisation ) .

En trouwens niemand verbied mij om een open-proxy op poort 79 te gaan draaien. Standaard poorten zijn meestal afdoende ( en zoek ook eens naar open proxies op google en voeg veelgebruikte poortnrs ook toe ). Maar voor je het weet wordt je door een firewall gezien als portscanner, waardoor de gebruiker alsnog niet op de website kan...
Hedendaagse proxies hoeven helemaal niet meer te detecteren te zijn ( of je kan argumenteren dat een browser ook een soort proxy is. Want hij ontvangt data van gebruiker ipv andere comp en speelt dit door naar het www.)

Maar hoe belangrijk is het dat mensen er niet met proxy's op mogen komen??? Want ik ben in het verleden nog wel eens providers tegengekomen die met transparante proxy's voor al hun klanten werkten, dus dan zouden al die klanten niet op jouw website kunnen komen.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Gomez12 schreef op zaterdag 23 juli 2005 @ 14:53:

Hedendaagse proxies hoeven helemaal niet meer te detecteren te zijn ( of je kan argumenteren dat een browser ook een soort proxy is. Want hij ontvangt data van gebruiker ipv andere comp en speelt dit door naar het www.)
Ik wil ook geen proxy's blokkeren, ik wil anonieme proxy's blokkeren bij registratie.
Maar hoe belangrijk is het dat mensen er niet met proxy's op mogen komen??? Want ik ben in het verleden nog wel eens providers tegengekomen die met transparante proxy's voor al hun klanten werkten, dus dan zouden al die klanten niet op jouw website kunnen komen.
Het is niet van kritiek belang, maar het is een jongerenwebsite en die wil ik graag zo veilig mogelijk hebben. Hardnekkige overtreders wil je blokkeren, pedo's wil je buiten houden, in het kort wil je op je site over gebruikers de informatie bijhouden die nodig is om ze (met hulp van bevoegde instanties) te straffen. Kortom, mensen mogen van mij tijdens het surfen op de website anoniem zijn, maar bij registratie mogen ze dat niet.

[ Voor 5% gewijzigd door TripleM op 23-07-2005 15:02 ]


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Je zou een blacklist kunnen queryen, bijvoorbeeld de DNSBL van blitzed: http://opm.blitzed.org/info
Daar staan vrij veel open proxies in.

Acties:
  • 0 Henk 'm!

  • Xenon
  • Registratie: Januari 2001
  • Laatst online: 21-08 09:12
Je kan via de $_SERVER variabele alerhande informatie ophalen van de client

Beste kan je dit zelf testen door het volgende in een scriptje te zetten

PHP:
1
2
echo '<pre>';
print_r($_SERVER);

ProtocoLAN.be: De beste LAN van de Maaskant


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Xenon schreef op zaterdag 23 juli 2005 @ 15:27:
Je kan via de $_SERVER variabele alerhande informatie ophalen van de client

Beste kan je dit zelf testen door het volgende in een scriptje te zetten

PHP:
1
2
echo '<pre>';
print_r($_SERVER);
Heb je misschien ook nog even zin om te zeggen welke info hiervan aangeeft of het een proxy is of niet??? Want TS noemt al een aantal variabelen die hij gevonden heeft.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Xenon schreef op zaterdag 23 juli 2005 @ 15:27:
Je kan via de $_SERVER variabele alerhande informatie ophalen van de client

Beste kan je dit zelf testen door het volgende in een scriptje te zetten

PHP:
1
2
echo '<pre>';
print_r($_SERVER);
De informatie die opgehaald kan worden die nuttig is noem ik hierboven al, het probleem is dus dat 'goede' anonieme proxy's die informatie niet meegeven en het dus erg moeilijk wordt om te zien of iemand een proxy gebruikt of niet.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ideetjes : Plaats een cookie bij elke bezoeker. Als iemand zich registreert kijk dan of het ip-adres van de vorige bezoeken hetzelfde is, is het alleen nu anders dan een bericht gooien van binnen 24 uur ontvangt u een mail met aanmeldingsgegevens zodat je rustig kunt uitzoeken of het nieuwe ip een ano proxy of iets anders is.

Maak je registratie systeem zo dat iedereen 1x kan registreren per ip-adres ( dus dat er gelijk een mail naar de gebruiker gaat ). De 2e x van 1 ip-adres betekent dat hij een bericht krijgt dat hij binnen 24 uur een mailtje krijgt, nu kan je weer uitzoeken of er iets met het ip-adres aan de hand is.

En gebruik inderdaad anonymous proxy-lists , kijk naar de headers etc.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Gomez12 schreef op zaterdag 23 juli 2005 @ 16:45:
Ideetjes : Plaats een cookie bij elke bezoeker. Als iemand zich registreert kijk dan of het ip-adres van de vorige bezoeken hetzelfde is, is het alleen nu anders dan een bericht gooien van binnen 24 uur ontvangt u een mail met aanmeldingsgegevens zodat je rustig kunt uitzoeken of het nieuwe ip een ano proxy of iets anders is.
Heb jij het nu over inloggen of registreren? Want je hebt het over registreren, maar ook over IP-adressen van vorige bezoeken. Ik ga er van uit dat de meeste mensen die zich registreren nog nooit op de site zijn geweest, dan is er nog geen IP-adres van vorige bezoeken. We zitten ook met IP-adressen van scholen, en het feit dat meerdere broers/zussen soms registreren. Ook is het zo dat leden vaak via computers van vriendjes/vriendinnetjes inloggen, kortom het IP-adres wisselt nogal eens.
Maak je registratie systeem zo dat iedereen 1x kan registreren per ip-adres ( dus dat er gelijk een mail naar de gebruiker gaat ). De 2e x van 1 ip-adres betekent dat hij een bericht krijgt dat hij binnen 24 uur een mailtje krijgt, nu kan je weer uitzoeken of er iets met het ip-adres aan de hand is.

En gebruik inderdaad anonymous proxy-lists , kijk naar de headers etc.
1x registreren per IP-adres is niet te doen, bovendien is mensen een dag laten wachten zonder dat ze gebruik kunnen maken van de site niet te doen. Daarom is het juist zo belangrijk dat we tijdens de registratie-procedure doen wat we kunnen. Kunnen we dan alleen checken op de variabelen en eventueel een snelle check op een lijst van open anonieme proxies, dan zal het daarbij blijven denk ik.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
TripleM schreef op zaterdag 23 juli 2005 @ 19:08:
[...]

Heb jij het nu over inloggen of registreren? Want je hebt het over registreren, maar ook over IP-adressen van vorige bezoeken. Ik ga er van uit dat de meeste mensen die zich registreren nog nooit op de site zijn geweest, dan is er nog geen IP-adres van vorige bezoeken. We zitten ook met IP-adressen van scholen, en het feit dat meerdere broers/zussen soms registreren. Ook is het zo dat leden vaak via computers van vriendjes/vriendinnetjes inloggen, kortom het IP-adres wisselt nogal eens.
Ik ging er vanuit dat je wel kon lezen zonder geregistreerd te zijn ( net zoals GoT ) en dan is de kans erg groot dat iemand eerst iets gaat lezen en daarna pas gaat reageren. Vergeet de rest van mijn opmerking dan maar.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Gomez12 schreef op zaterdag 23 juli 2005 @ 23:15:
[...]

Ik ging er vanuit dat je wel kon lezen zonder geregistreerd te zijn ( net zoals GoT ) en dan is de kans erg groot dat iemand eerst iets gaat lezen en daarna pas gaat reageren. Vergeet de rest van mijn opmerking dan maar.
Hmm nee dan heb ik jou verkeerd begrepen. Het is inderdaad niet nodig om te registreren als je alleen wil kijken op de site, maar als je zelf wil posten moet je je uiteraard registreren.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Tja, dan denk ik dat het hebben van actieve moderators, makkelijker is dan proxy detectie. Wat meestal niet echt 100% te vertrouwen valt. Overigens kan je niet altijd als klant bepalen of je een proxy gebruikt...

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
TripleM schreef op zondag 24 juli 2005 @ 02:03:
[...]

Hmm nee dan heb ik jou verkeerd begrepen. Het is inderdaad niet nodig om te registreren als je alleen wil kijken op de site, maar als je zelf wil posten moet je je uiteraard registreren.
Maar als iemand kan lezen krijgt hij een pagina van jouw site en kan jij dus een cookie zetten op zijn computer, in dit cookie stel je vast welk bezoekernr het is.
Bij elke pageview kijk je of de gebruiker een cookie heeft met een bezoekernr, zoja dan serverside het ip en bezoekernr opslaan, indien nee dan cookie zetten.

Het is absoluut geen ideale oplossing, omdat sommige mensen cookies blokkeren, andere mensen wissen hun cookies voor het registeren, andere surfen altijd via een anon-proxy. Maar het is misschien een extra methode, toch weer 0,000001 % extra security bijgedragen.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
alienfruit schreef op zondag 24 juli 2005 @ 03:02:
Tja, dan denk ik dat het hebben van actieve moderators, makkelijker is dan proxy detectie. Wat meestal niet echt 100% te vertrouwen valt. Overigens kan je niet altijd als klant bepalen of je een proxy gebruikt...
Dat gebeurt nu al. Alleen is dat altijd actie achteraf, terwijl ik juist wil voorkomen dat bepaalde dingen gebeuren.

Er is ook geen 100% methode, anders was die allang ergens te vinden, hopelijk zijn er gewoon een paar relatief simpele maatregelen die je kunt gebruiken bij registratie om het net weer even iets lastiger te maken om je te registreren als je een anonieme proxy gebruikt.

Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 21-09 08:47

Eelke Spaak

- Vlad -

Als het werkelijk hoge prioriteit heeft kan je overwegen om een (evt. onzichtbaar) Java applet op een webpagina te plaatsen en deze verbinding te laten maken met je webserver (een PHP-scriptje). Als dat scriptje dan een ander IP-adres doorkrijgt (in Java kan je sowieso zonder proxy verbinding maken) dan de 'gewone' webpagina, dan weet je dat de gebruiker achter een proxy zit.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

Verwijderd

Wat ik zelf ooit heb gedaan is een script schrijven dat alle bekende proxy sites afgaat en de proxies uitleest, in een database gooit, en dan kun je daarmee checken of iemand op een proxy zit of niet. Pak de 25 grootste proxysites (hoe meer hoe beter al kopieren veel sites gewoon van elkaar) en je hebt 90% van de proxies wel te pakken.

Acties:
  • 0 Henk 'm!

  • TripleM
  • Registratie: Januari 2001
  • Laatst online: 20-11-2024
Verwijderd schreef op zondag 24 juli 2005 @ 22:14:
Wat ik zelf ooit heb gedaan is een script schrijven dat alle bekende proxy sites afgaat en de proxies uitleest, in een database gooit, en dan kun je daarmee checken of iemand op een proxy zit of niet. Pak de 25 grootste proxysites (hoe meer hoe beter al kopieren veel sites gewoon van elkaar) en je hebt 90% van de proxies wel te pakken.
Dat is misschien wel een optie inderdaad, het kost wel even wat tijd maar daarna loopt het wel natuurlijk.
Eelke Spaak schreef op zondag 24 juli 2005 @ 20:55:
Als het werkelijk hoge prioriteit heeft kan je overwegen om een (evt. onzichtbaar) Java applet op een webpagina te plaatsen en deze verbinding te laten maken met je webserver (een PHP-scriptje). Als dat scriptje dan een ander IP-adres doorkrijgt (in Java kan je sowieso zonder proxy verbinding maken) dan de 'gewone' webpagina, dan weet je dat de gebruiker achter een proxy zit.
Ik heb geen idee wat je bedoelt, maar Java is geen optie denk ik. Veel gebruikers hebben geen Java (en de drempel voor registreren moet ook zo laag mogelijk blijven) en Java is te sloom om op te starten. Sowieso heeft het geen superhoge prioriteit, ik zoek een beetje de balans tussen relatief eenvoudige mogelijkheden en effectiviteit.

Aan de hand van de reacties tot nu toe, en wat ik heb gelezen, lijkt me het uitlezen van de variabelen een eenvoudige maar relatief ineffectieve oplossing. Met fsockopen controleren of poorten 3128 en/of 8080 openstaan is al weer een volgende stap, is er dan nog een manier om te controleren of die open poort een proxy verbinding accepteert? Met PHP dus?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
TripleM schreef op zondag 24 juli 2005 @ 23:14:
is er dan nog een manier om te controleren of die open poort een proxy verbinding accepteert? Met PHP dus?
Jawel. Je kunt dan een proxyrequest plaatsen. Deze lijkt op een 'normale' HTTP request, alleen ipv /index.php wordt dan bijvoorbeeld http://www.tweakers.net/index.php aangeroepen.

Acties:
  • 0 Henk 'm!

Verwijderd

Een tijdje terug heb ik het volgende artikel gelezen HTTP fingerprinting

Het suggereerd dat je door het maken van een aantal (al dan niet valide) request's en de reply's die daaruit volgen kunt afleiden wat voor soort (proxy)server er draait.

In het artikel word gebruik gemaakt van (volgen mij) bayesian statistiek maar met twee of drie hard-coded requests' moet je een heel eind kunnen komen denk ik zo,

(of ik zit er als gewoonlijk volkomen naast)

[ Voor 2% gewijzigd door Verwijderd op 25-07-2005 01:12 . Reden: spelfoutjes.. ]


Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Verwijderd schreef op zondag 24 juli 2005 @ 23:47:
Een tijdje terug heb ik het volgende artikel gelezen HTTP fingerprinting
Op zich heeft de topic starter hier niet veel aan. Als hij namelijk al weet dat hij een connectie kan opzetten met een anonymous proxy, interesseert het hem niet zoveel wat voor proxy het is.

De topic starter zou juist het tegenovergestelde willen weten: wat voor directe browser eraan hangt. Wellicht dat je dat ook kan fingerprinten d.m.v. malformed results...

[ Voor 6% gewijzigd door Infinitive op 25-07-2005 10:16 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat wij een tijd gedaan hebben is een connectie openen naar de bekende porten (80, 8080, 3128 etc) en kijken of we een file terugkregen op onze server. Zo ja dan was het een proxy.
Vrij zwaar, maar vrij effectief. Voor een registratiepagina is het te doen

Acties:
  • 0 Henk 'm!

Verwijderd

Vergeet niet dat een proxy op zo ongeveer elke poort kan draaien. Iemand die kwaad in de zin heeft kost het waarschijnlijk 1 minuut langer om een proxy te vinden die nét weer op een andere port staat en dus niet wordt gedetecteerd met een connectiescript. En alle poorten checken is ondoenlijk :)

Even snel ter voorbeeld, zomaar snel wat proxies met andere poorten dan bovenstaande post:

http://216.239.59.104/sea...air.ru/proxy/+proxy&hl=nl

200.47.100.197:6588
130.194.11.216:1080
202.72.156.21:8000
130.104.72.201:3124
201.243.10.50:3382
200.158.120.89:6588

Eerste hit op google (samair.ru is overigens wel een bekende), voor een kwaadwillend persoon zo gevonden...

[ Voor 6% gewijzigd door Verwijderd op 25-07-2005 16:13 ]

Pagina: 1