Détecter les proxies

  • Auteur de la discussion Auteur de la discussion gusterman
  • Date de début Date de début
Nouveau WRInaute
Bonjour à tous,

Ayant mis en place un système de ban sur mon site, je vois régulièrement certains bannis revenir sous proxy. En plus du ban sur IP, je crée un cookie pour retrouver ce membre, et remettre à jour l'IP, mais à force, certains ont compris qu'il suffisait également de vider ses cookies pour revenir.

Je ne viens pas demander comment mettre en place un système de ban infaillible (chose impossible de toute façon), mais plutôt... est-ce qu'il existe une méthode pour savoir si un visiteur passe par un proxy ? Que ce soit via PHP, un module apache, un programme indépendant pour linux, j'accepte toutes les solutions.

edit : j'en profite pour poser une autre question : comment puis-je faire pour demander à Apache de logger toutes les requêtes que peux faire un IP précis ?

Merci d'avance
 
Nouveau WRInaute
Rod la Kox a dit:
Apart récupérer régulièrement les IP des proxy et les ban en masse, il n'y a aucune solution.

Un serveur proxy n'envoie pas des headers particuliers par exemple, n'est-il pas plus bavard qu'une connexion classique ?

J'avais pensé à établir une liste des différents FAI dans un tableau en PHP, si l'IP n'appartient à aucun de ces FAI, alors je considère l'IP comme un proxy, mais cette technique est plutôt risquée et trop contraignante.. :mrgreen:
 
Nouveau WRInaute
forummp3 a dit:

Malheureusement, cela fonctionne seulement si le serveur proxy a configuré "forwarded_for" dans son fichier config, ce qui n'est pas le cas pour 99% des proxies :cry:

Une autre idée qui me passe par la tête : tester via un socket en PHP, si on peut utiliser l'IP qui vient de se connecter à notre site, comme un proxy. Mais niveau performance, cela ne risque pas d'être idéal.
 
WRInaute occasionnel
Parfois, je surfe un chouia entre midi et deux au boulot (pas beaucoup, je le jure). Comme beaucoup de grosses boites, tous les pcs de l'entreprise passent tous par un même proxy.

Si tu bloques tous les proxys systématiquement tu risques de perdre les visites des gens "comme moi".
 
WRInaute accro
En effet, il est bon de préciser que ce qu'il faut éviter, ce sont les proxies "ouverts" ou "publics"...

Jacques.
 
Nouveau WRInaute
jcaron a dit:
Il y a un webservice qui fait ça chez maxmind http://www.maxmind.com/app/proxy

Sinon il y a un contributeur ici qui avait développé un autre service de ce type, en cherchant un peu sur WRI tu devrais pouvoir le retrouver.

Jacques.

Merci pour ce lien. J'ai également cherché sur webrankinfo, et je suis tombé sur un webservice similaire (zero-proxy.com).
Mais, 2 choses me gênent :
- c'est payant (pas très chère certes, mais payer pour quelque chose dont je ne serai pas forcément convaincu..). J'ai tout de même envoyé un mail sur maxmind pour avoir une démo gratuite, on verra bien.
- ces sites fonctionnent en général sur un principe tout simple : des bots récupèrent les listes de proxies sur le net, et si l'ip est trouvé dans la base de données, on la considère comme proxy. A la limite, je peux développer moi-même ce genre de solution si vraiment je ne trouve rien d'autre :mrgreen:

Francois13 && jcaron : gros +1, en effet, je parlais des serveurs proxies ouverts à tous :wink: les autres étant n'étant pas une menace pour moi.

maximedt : je continue d'éplucher mes idées, et si jamais je ne trouve pas mieux, j'essayerai de me développer un détecteur de proxies via socket donc :D

Merci à vous en tout cas.

Si vous avez d'autres idées, je suis preneur, je vais continuer à faire des tests de mon côté et voir comment je pourrais reconnaitre ces satanés proxies efficacement.
 
K
Kounte
Guest
Et en comparant l'ip avec une base de proxy en service en ligne ?
 
Nouveau WRInaute
Kounte a dit:
Et en comparant l'ip avec une base de proxy en service en ligne ?

Il y a http://www.samair.ru/ qui propose des listes à jour en permanence, qui pourrait me servir de base de données. Le problème, c'est qu'en allant sur d'autres sites, on peut trouver également d'autres proxies, pas forcément listé par ce site là. Sans parler des proxies que certains trouveront sur des forums privés.

Après, si je veux réaliser un socket en PHP qui vérifie que l'on peut utiliser l'IP qui se connecte à mon site, comme proxy, me voilà confronté à un nouveau problème : je ne connais pas forcément le port utilisé. De plus, je ne vais pas coder un scanner de port (chose qui est, illégal il me semble, sur un IP autre que le siens).

Autre idée qui me passe par la tête : via une petite application en java que le visiteur lancerait en allant sur le site, on pourrait ainsi récupérer son véritable IP, le java étant exécuté sur la machine du client, et non à distance.

Je connais sinon un programme que l'on utilise sur les serveurs IRC, afin de savoir si l'hôte qui s'y connecte, ne passe pas par un proxy ouvert. Il s'agit de BOPM : http://wiki.blitzed.org/BOPM
Sur IRC, il est plutôt efficace, mais pas infaillible. Bon malheureusement, il n'y a aucune version pour l'adapter à un serveur web.
 
WRInaute accro
gusterman a dit:
Autre idée qui me passe par la tête : via une petite application en java que le visiteur lancerait en allant sur le site, on pourrait ainsi récupérer son véritable IP, le java étant exécuté sur la machine du client, et non à distance.

D'abord dans la plupart des cas tu vas obtenir son IP "locale" (de nos jours la plupart des gens ont un réseau local avec du NAT), ensuite je ne suis pas sûr que sans autorisation explicite de l'utilisateur pour des droits "étendus" tu puisses obtenir l'info. Sinon tu peux lancer une connexion vers ton serveur pour obtenir cette info, mais là encore, il risque d'y avoir un problème de droits, non?

Plus simple probablement: du JS qui va faire une connexion Ajax vers ton serveur? Suivant comment le proxy est implémenté, il est vraisemblable que ça passe en direct (il me semble que beaucoup de proxies publics travaillent en modifiant les URLs à la volée dans les pages plutôt qu'en modifiant la config du browser, non?). Tu peux même tenter bêtement en JS de reforcer ta "vraie" URL (les proxies publics vont en général modifier les URLs en trucs genre adresseduproxy/urldorigine). Evidemment ça ne marchera pas avec un proxy configuré dans le browser tout ça.

Jacques.
 
Nouveau WRInaute
Je viens de recevoir une démo par mail de la part de maxmind.com

J'ai testé leur application sur une dizaine de proxies, je dois dire que c'est plutôt efficace. Ils fournissent un script PHP permettant d'automatiser facilement la vérification, mais malheureusement ... le prix n'est pas intéressant, et dépend du nombre d'ip que l'on vérifie :
- 1250 requêtes > 5$
- 2500 requêtes > 10$
- 5000 requêtes > 20$
- 12500 requêtes > 50$
- 25000 requêtes > 100$

Si je dois vérifier l'IP de chacun de mes visiteurs, je risque de tourner à quasi 50$ par jour, aïe :mrgreen:
Bref, je laisse tomber les solutions payantes.

Pas bête l'idée de la connexion AJAX jcaron :D

jcaron a dit:
Evidemment ça ne marchera pas avec un proxy configuré dans le browser tout ça.

C'est surtout cela qui m'embête, j'aurais voulu mettre en place quelque chose de quasi infaillible, peu importe la méthode de connexion au proxy utilisée, mais je crois que je suis un peu à la recherche de l'impossible :?

Merci à tous pour vos idées, je pense que je vais arrêter ma recherche ici 8)
 
WRInaute accro
gusterman a dit:
Si je dois vérifier l'IP de chacun de mes visiteurs, je risque de tourner à quasi 50$ par jour, aïe :mrgreen:

Tu n'as besoin de vérifier que ceux qui postent/s'inscrivent ou je ne sais quoi, non? Ca devrait faire beaucoup moins... Tu peux probablement aussi utliser un cache.

Jacques.
 
Nouveau WRInaute
A l'inscription, ca pourrait être pas mal en effet :)
Le cache est de rigueur à mon avis oui, ca serait du gachi de vouloir vérifier plusieurs fois le même IP :P
 
WRInaute accro
gusterman a dit:
Après, si je veux réaliser un socket en PHP qui vérifie que l'on peut utiliser l'IP qui se connecte à mon site, comme proxy, me voilà confronté à un nouveau problème : je ne connais pas forcément le port utilisé.
Tu as la variable $_SERVER['REMOTE_PORT'] qui est renvoyée
 
Nouveau WRInaute
Leonick a dit:
Tu as la variable $_SERVER['REMOTE_PORT'] qui est renvoyée

Cette variable retourne le port auquel le client se connecte pour accèder au site, c'est à dire, 80 dans la plupart des cas, non ?
Imaginons :
- le visiteur passe par un proxy sur le port 3128. Le proxy se connecte ensuite au site via le port http standard : 80. $_SERVER['REMOTE_PORT'] devrait donc retourner 80

Enfin je dis peut-être une bêtise :mrgreen:
 
WRInaute accro
Non, le port 80 c'est dans SERVER_PORT.

Dans une connexion TCP (et donc http), il y a:
- une adresse source
- un port source
- une adresse destination
- un port destination.

La source c'est le client, la destination c'est le serveur.

Sur une connexion via un proxy, il y a deux connexions HTTP (et donc TCP). Le "client" est donc le proxy, et on récupère via REMOTE_ADDR et REMOTE_PORT l'adresse et le port sources de la connexion. Normalement le port est plus ou moins tiré au hasard parmi les valeurs supérieures à 1024 ou 8192 suivant les cas. Ca n'apprend donc pas grand chose.

Jacques.
 
WRInaute accro
Non, parce que c'est le port "source" de la connexion du proxy vers le serveur, pas le port sur lequel les clients se connectent.

Sans proxy

Client (IP1:port1) -> serveur (IP2:port2)

REMOTE_ADDR = IP1
REMOTE_PORT = port1 (assez aléatoire)
SERVER_PORT = port2 (généralement 80)

Avec proxy

Client (IP1:port1) -> proxy (IP2:port2)
proxy (IP3:port3) -> serveur (IP4:port4)

REMOTE_ADDR = IP3
REMOTE_PORT = port3
SERVER_PORT = port4

Généralement IP3 = IP2 mais ce n'est pas obligé.

Mais ce qui nous intéresse, c'est:
- IP1 pour connaître la "vraie" IP de l'utilisateur. Si le proxy est coopératif, il met ça dans X-Forwarded-For. S'il ne l'est pas (cas qu'on cherche à gérer a priori), aucune info
- IP2 + port2 (pour voir si on peut se connecter et si c'est donc un proxy)

On peut supposer que IP2=IP3=REMOTE_ADDR. Par contre pour le port, c'est mystère, en tous cas c'est sûr à 99% que ce n'est pas port3. De plus, au dela du fait que ça réponde sur un port, il faut vérifier que c'est un proxy (le fait que ça réponde sur le port 80 ne signifie pas que c'est un proxy, mais un proxy a de fortes chances de répondre sur ce port...).

Jacques.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut