[PHP] protect antiflood -> comment faire avec proxy ??

protect antiflood -> comment faire avec proxy ?? [PHP] - Programmation

Marsh Posté le 21-01-2002 à 00:00:58    

salut,
 
je viens d'avoir une tres bonne idée pour une protection antiflood meme avec un forum ouvert (sans authentifiation) mais j'ai des questions ..
 
je recup$REMOTE_ADDR qui est la seule info sur le client dont je suis puisse etre sur ... mais comment ca fonctionne avec les proxys ??
 
si 10 personnes passent pas le meme proxy, j'aurais donc 10 fois la meme IP ??
 
si oui, comment contourner ce probleme ?
 
je peux pas utiliser $REMOTE_HOST a cause des serveurs linux :(

Reply

Marsh Posté le 21-01-2002 à 00:00:58   

Reply

Marsh Posté le 21-01-2002 à 00:08:58    

c un truc du style x_forwarded_for

Reply

Marsh Posté le 21-01-2002 à 00:09:42    

et au fait, j'ai pas menti!!!
(pour le postageee à <1s )
je fais backspace + f5 + enter
pas compliké ;)

Reply

Marsh Posté le 21-01-2002 à 00:11:02    

si $HTTP_X_FORWARDED_FOR est défini alors il y a un proxy entre le site et le client.
 
$ip= getenv("HTTP_X_FORWARDED_FOR" ) ? getenv("HTTP_X_FORWARDED_FOR" ) : getenv("REMOTE_ADDR" );
 
mais il faut tester si l'adresse obtenue n'est une adresse hors-internet (192.168.0.x, ...) (genre qq qui a un proxy sur sa machine connectée au web)

 

[edtdd]--Message édité par ethernal--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 00:12:23    

ah
c pas cool ça,
tu m'as banni mon ip et j'avais rien fait,
 :??:  
potiron mauvais joueur :jap:

 

[edtdd]--Message édité par k666--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 01:00:31    

k666 a écrit a écrit :

et au fait, j'ai pas menti!!!
(pour le postageee à <1s )
je fais backspace + f5 + enter
pas compliké ;)  




 
ben en tout cas en local donc instantané j'y arrive pas aussi vite ...
NON, je t'ai pas bannie --> tu as du faire l'andouille et le script PHP du forum ta bannie !!
j'avais bien dit que j'ai rajouté une protection antiflood  :na:  :D  
 
ok, merci ethernal, je fonce tester tout ca .

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 01:02:37    

mec
keskil faut que je fasse pour que tu me croies?
keske tu crois que j'ai à fouttre de te mentir?
tu crois que je suis mythoµ?
j'essaye simplement de contribuer à que tu fasses ton forum au mieux,
c d'ailleurs ce que tu cherches,
des béta tests, des critiques, etc...
ou alors tu préfères qu'on dise stérilement "super..." ?
voilà,
salut!

Reply

Marsh Posté le 21-01-2002 à 01:10:26    

beuuuuuhhhh  :na:  
fait pas la gueule tu es pas un monstre  ;)  
 
oui, je suis d'accord pour les tests mais pas pour les coups dans le dos SANS explications comme j'en ai eu pas mal au debut ...  :sarcastic:  
je m'enerve a chercher un probleme general alors que c'etait une seule personne qui postait a blanc ..

Reply

Marsh Posté le 21-01-2002 à 01:14:38    

ok potiron,
 
piss and love

Reply

Marsh Posté le 21-01-2002 à 01:19:35    

potiron a écrit a écrit :

 
 
ok, merci ethernal, je fonce tester tout ca .  
 




 
de rien ;)
si tu trouves un moyen rapide pour tester si c'est une adresse interne, je suis preneur :)  
 
dans phpBB ils testent ça comme ça :
if( !empty($HTTP_X_FORWARDED_FOR) )
{
 $client_ip = ( preg_match("/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/", $HTTP_X_FORWARDED_FOR, $ip_list) ) ? $ip_list[0] : $REMOTE_ADDR;
}
else
{
 $client_ip = $REMOTE_ADDR;
}
$user_ip = encode_ip($client_ip)
mais je ne vois pas bien ce que fait le preg_match() ??

Reply

Marsh Posté le 21-01-2002 à 01:19:35   

Reply

Marsh Posté le 21-01-2002 à 01:25:26    

bin je crois qu'il regarde si ya une suite de n chiffres séparé d'un point, séparée de m chiffre et blabla... ?

Reply

Marsh Posté le 21-01-2002 à 01:55:26    

:heink:  
 
ethernal : c'est sympa mais .....
 
je voulais pas regarder ce que fait phpBB ou un autre pour eviter justement de m'en inspirer et la je tombe pile dessus  :sarcastic:  :D  
 
bon pas grave ... de toute facon j'ai deja fait une entorse a mon reglement a cause de la compression GZIP (je voulais verifier si la mienne fonctionnait et enfin de comtpe j'ai laissé celle de phpBB ... pour l'instant) ..
 
pour l'ip il verifie qu'il y a que des chiffres mais je me demande bien pourquoi ??!!
 
 
k666 : passe moi ton IP que je vire le ban .
 
----
 
j'ai rien dit, y a qu'une seule personne qui est bannie ...

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 02:08:28    

potiron a écrit a écrit :

:heink:  
 
ethernal : c'est sympa mais .....
 
je voulais pas regarder ce que fait phpBB ou un autre pour eviter justement de m'en inspirer et la je tombe pile dessus  :sarcastic:  :D  




 
oups, sorry alors ;)
le premier post c'est la méthode que j'ai utilisé pour mon forum précédent, mais j'ai été vérifier chez d'autres juste après avoir posté histoire d'être sûr ;) (les pros savent souvent mieux)
 
je comprends pas non plus pq ils vérifient que c des chiffres...

 

[edtdd]--Message édité par ethernal--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 02:44:17    

rouuungt'diou !!
j'arrive pas a trouver la moindre info sur : HTTP_X_FORWARDED_FOR -> rien dans la DOC PHP
 
pour l'ip avec la reg exp j'imagine qu'il veut eviter les IP du genre : proxy.chello.fr  ??
 
 
bon, en plus y a une erreur dans le script de phpBB, il prend pas en compte tous les cas possible ..
 
oh bordel, c'est encore plus compliqué que je l'aurais imaginé pour avoir une identification sans faille car de toute facon on choppe l'adresse IP du proxy ...
 
---------
 
tiens, pour ta question :
 
 if($HTTP_X_FORWARDED_FOR)
 {
   // case 1.A: proxy && HTTP_X_FORWARDED_FOR is defined
   $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}",
 $HTTP_X_FORWARDED_FOR, $array) ;
   if ($b && (count($array)>=1) )
   { return ( gethostbyaddr($array[0]) ) ; } // first IP in the list
   else
   { return ( $REMOTE_ADDR . '_' . $HT
TP_VIA . '_' . $HTTP_X_FORWARDED_FOR )
 ; }
 }
 elseif($HTTP_X_FORWARDED)
 {
   // case 1.B: proxy && HTTP_X_FORWARDED is defined
   $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}",
 $HTTP_X_FORWARDED, $array) ;
   if ($b && (count($array)>=1) )
   { return ( gethostbyaddr($array[0]) ) ; } // first IP in the list
   else
   { return ( $REMOTE_ADDR . '_' . $HT
TP_VIA . '_' . $HTTP_X_FORWARDED ) ; }
 
 }
 elseif($HTTP_FORWARDED_FOR)
 {
   // case 1.C: proxy && HTTP_FORWARDED_FOR is defined
   $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}",
 $HTTP_FORWARDED_FOR, $array) ;
   if ($b && (count($array)>=1) )
   { return ( gethostbyaddr($array[0]) ) ; } // first IP in the list
   else
   { return ( $REMOTE_ADDR . '_' . $HT
TP_VIA . '_' . $HTTP_FORWARDED_FOR ) ;
 }
 }
 elseif($HTTP_FORWARDED)
 {
   // case 1.D: proxy && HTTP_FORWARDED is defined
   $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}",
 $HTTP_FORWARDED, $array) ;
   if ($b && (count($array)>=1) )
   { return ( gethostbyaddr($array[0]) ) ; } // first IP in the list
   else
   { return ( $REMOTE_ADDR . '_' . $HT
TP_VIA . '_' . $HTTP_FORWARDED ) ; }
 }
 elseif($HTTP_VIA)
 {
   // case 2:  
   // proxy && HTTP_(X_) FORWARDED (_FOR) not defined && HTTP_VIA defined
   // other exotic variables may be defined  
   return ( $HTTP_VIA .  
            '_' . $HTTP_X_COMING_FROM 
.
            '_' . $HTTP_COMING_FROM   
 
          ) ;
 }
 elseif(   $HTTP_X_COMING_FROM || $HTTP_COMING_FRO
M  )
 {
   // case 3: proxy && only exotic variables defined
   // the exotic variables are not enough, we add the REMOTE_ADDR of the proxy
   return ( $REMOTE_ADDR .  
            '_' . $HTTP_X_COMING_FROM 
.
            '_' . $HTTP_COMING_FROM   
 
          ) ;
 }
 else
 {
   // case 4: no proxy  
   // or tricky case: proxy+refresh
   return ( gethostbyaddr($REMOTE_ADDR) ) ;
 }

Reply

Marsh Posté le 21-01-2002 à 02:51:37    

bon sang, c'est de + en + compliqué, je vais encore y passer quelques nuits blanches ...
 
bon, voici les vars a tester :

Citation :


<?
echo "REMOTE_ADDR = $REMOTE_ADDR";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_VIA = $HTTP_VIA";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_X_COMING_FROM  = $HTTP_X_COMING_FROM ";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_X_FORWARDED_FOR  = $HTTP_X_FORWARDED_FOR ";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_X_FORWARDED = $HTTP_X_FORWARDED";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_COMING_FROM  = $HTTP_COMING_FROM ";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_FORWARDED_FOR  = $HTTP_FORWARDED_FOR ";print("<hr>\n" );print("<hr>\n" );
echo "HTTP_FORWARDED = $HTTP_FORWARDED";print("<hr>\n" );print("<hr>\n" );
?>


 
si je passe par un proxy, j'ai ca :
 

Citation :

REMOTE_ADDR = 212.186.224.48
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
HTTP_VIA = HTTP/1.1 paris[0A0A0A01] (Traffic-Server/2.2 [uSc s f p eN:tOcS i p s ])
--------------------------------------------------------------------------------
 
--------------------------------------------------
------------------------------
HTTP_X_COMING_FROM  =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------
HTTP_X_FORWARDED_FOR  =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------
HTTP_X_FORWARDED =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------
HTTP_COMING_FROM  =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------
HTTP_FORWARDED_FOR  =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------
HTTP_FORWARDED =  
--------------------------------------------------
------------------------------
 
--------------------------------------------------
------------------------------


 
 
donc tu vois ce que je disais ?
phpBB ce plante complet en testant HTTP_X_FORWARDED_FOR mais j'ai dans l'idée que le resultat var etre different suivant le serveur ou tourne le dernier proxy  :sarcastic:  :gun:

Reply

Marsh Posté le 21-01-2002 à 12:18:01    

potiron mon ip = tu la connais :D
212.198.190.68
 
ci mer;)

Reply

Marsh Posté le 21-01-2002 à 12:22:24    

le HTTP_VIA est gérée par le proxy du client. souvent y a rien d'indiqué (entêtes http).
 
s'il y a un proxy, HTTP_X_FORWARDED_FOR est l'ip du client. sauf dans le cas ou le proxy est un proxy anonyme.  Dans ce cas pas moyen d'avoir l'ip réelle du client et seul REMOTE_ADDR est défini (=ip du proxy)
 
d'ou viennent tes autres variables  (HTTP_FORWARDED, HTTP_COMING_FROM, ...) ? j'ai jamais vu tout ça, tu as une page de doc ?

Reply

Marsh Posté le 21-01-2002 à 18:31:01    

k666 : ben non je la connais pas, elles sont stockés en md5 (crypté) mais c'est bon , y avait qu'une personne de bannie donc ca pouvait etre que la tienne  :D  
 
ethernal : pour la page de DOC il faut voir apache ... ou celles la (mais tu as tout sur apache) :
 
http://www.geocrawler.com/archives [...] 0/6269552/
http://www.zope.org/Members/TWilson/GettingVisitorsIP

Reply

Marsh Posté le 21-01-2002 à 18:33:27    

k666 a écrit a écrit :

ah
c pas cool ça,
tu m'as banni mon ip et j'avais rien fait,
 :??:  
potiron mauvais joueur :jap:  
 
 




 
Meuh, t'aurais pas NOOS par hasard ?
Parce que g fais le con, et g ete banni ;)
 
G changé d'ip, et g t tjs banni, donc je pense que ton sytement de bannissement ne prends pas en compte les IP reelle, mais les IP serveur ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 21-01-2002 à 18:57:38    

ah non, la j'ai plus personne ..

Reply

Marsh Posté le 21-01-2002 à 19:00:58    

L'adresse IP, c t pas un truc du style : 195.132.82.1 ?
PArce que si c t ca, c le serveur NOOS ;)
 
D'ailleurs, je suis plus banni ;)
En debannissant K666, tu l'as fais pour moi aussi ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 21-01-2002 à 19:53:10    

:??:  :??:  :??: je peux pas savoir l'IP, elles sont cryptés mais je crois que je vais virer ca tant que j'ai pas regler tous les problemes ..
 
bon alors y a un probleme !?
il faut donc bien que je mette cette authentification avancé d'ip :(  
 
k666 : tu peux faire un floood sur le forum (dans un sujet plutot que des nouveaux sujets ...) histoire de verifier le probleme .. stp ?  ;)

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 21-01-2002 à 21:33:42    

ok j'essaye toudsuite ;)

Reply

Marsh Posté le 21-01-2002 à 21:35:57    

ahyé
chuis banned :jap:  
 
maintenant, tu me débannes?

Reply

Marsh Posté le 21-01-2002 à 21:44:26    

au fait, potiron,
je me suis auto débanni
 
merci qd même ;)
 
 
:lol: !!!

Reply

Marsh Posté le 21-01-2002 à 22:59:48    

m'etonnerait  :sarcastic:  
tu as pas été bannie, c'est tout ...

Reply

Marsh Posté le 21-01-2002 à 23:09:47    

nananna
je t'assure je me suis débanni :D
 
delete from bannir where ip='21.......'

Reply

Marsh Posté le 22-01-2002 à 00:13:15    

tu peux pas lancer de requetes mysql ailleurs qu'en local (serveur) !

Reply

Marsh Posté le 22-01-2002 à 00:18:07    

allons ;)
allons mon cher potiron
tu me mets trop en doute ;) c marrant à la fin,
regarde bien ton "back orifice" :D
 
 
http://lorenzozo.kilio.com/_script [...] m%20bannir
 
et là je suis gentil ;)

Reply

Marsh Posté le 22-01-2002 à 01:44:57    

je l'avais oublié ca :)
 
gros malin va !
ca a rien a voir avec le forum ce script  ;)

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 22-01-2002 à 01:54:45    

t convaincu que je ments pas ? :sweat:

Reply

Marsh Posté le 22-01-2002 à 02:31:25    

:ange:  :ange:  :ange:  oui ;)

 

[edtdd]--Message édité par potiron--[/edtdd]

Reply

Marsh Posté le 22-01-2002 à 02:40:52    

ahhhhhhhhhhh :wahoo:  
 
je peux aller dormir en paix maintnant  :sleep:  
 
 
allez mec,
bon forum!!! :pt1cable:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed