IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] Vérifier la logique d'un script anti-flood


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut [Dates] Vérifier la logique d'un script anti-flood
    Bonjour,

    Je viens de finir ce modeste script, destiné à empêcher deux inscriptions avec une même IP dans un délais inférieur à 20 secondes. A priori il fonctionne bien, mais j'aurais besoin d'être certain qu'il est logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    //on récupère l'ip de l'inscrit
    $ip = $_SERVER["REMOTE_ADDR"];
     
    //on récupère la date unix pour la comparaison plus aisée entre deux dates
     d'inscription avec la même IP:
    $dateAntiFlood=time();
     
    //on crée une date inférieur de 20 secondes à celle de la date de validation:
    $dateLimite=$dateAntiFlood-20;
     
    //on va chercher dans la base si une IP identique au posteur s'est inscrit 
    moins de 60 secondes avant celle-ci :
    $affiche="SELECT  ipInscription  FROM membre WHERE ipInscription='".$ip."' 
    AND dateAntiFlood > '".$dateLimite."' AND dateAntiFlood < '".$dateAntiFlood."'";
    $resultat = mysql_query("$affiche");
    $bob=mysql_num_rows($resultat);
    if($bob>0)
    {
    //si on trouve une IP, on affiche un message et on insère rien :
     echo'Veuillez patienter quelques instant avant de poster à nouveau.';
    ;}
    //si il n'y a pas de résultat, alors c'est bon et on insère
    else 
    {
    on insère dans la base;
    }
    Voilà parce que dans une autre version j'avais fais une grosse erreur, il me semble : je n'avais pas fixé de fourchette dans la requête qui était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    SELECT  ipInscription  
    FROM membre WHERE ipInscription='".$ip."' AND dateAntiFlood > '".$dateLimite."'
    Or, si je ne m'abuse, avec cette dernière requête je bloquais absolument toutes les IP identiques pour peu qu'elles aient été enregistrées au moins 20 secondes avant la date actuelle, ce qui aurait toujours été le cas.


    J'ai bon ?

  2. #2
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Salut,

    Je n'ai pas trop compris ton interval.
    En fait il faut que tu selectionnes les tuple, avec l'ip mentionnée, et une (dateAntiFlood +20 sec) antérieur à l'instant T.
    Dis comme cela, ce ne doit pas être très clair.

    Le mieux étant de faire un petit schéma de la ligne de temps.

    A 15h00, le mec poste, jusqu'à 15h20, il n'à plus le droit de poster.
    (dateantiFlood = 15h00 ici)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         15H00         15H20
    [------|//////////////|-------]
    Donc tant que l'heure à l'instant T de la requete est plus petit que dateantiflood+20, alors il n'à pas le droit de poster.

    voila ce que sa donne ::->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $ip = $_SERVER["REMOTE_ADDR"];
    $sql = "SELECT  ipInscription  FROM membre WHERE ipInscription='".$ip."' AND (dateAntiFlood + INTERVAL 20 SECOND) > NOW()";
    $resultat = mysql_query("$affiche");
    $bob=mysql_num_rows($resultat);
    if($bob>0)
    {
    //si on trouve une IP, on affiche un message et on insère rien :
     echo'Veuillez patienter quelques instant avant de poster à nouveau.';
    ;}
    //si il n'y a pas de résultat, alors c'est bon et on insère
    else 
    {
    on insère dans la base;
    }
    Sinon tu remarqueras que j'ai plutot utilisé les fonctions sql. C'est beaucoup plus approprié, à mon gout.

    Voila voila, si l'acool d'hier soir ne pas trop attaqué le cerveau ce que je dit la devrait avoir du sens

    Bbye

Discussions similaires

  1. vérifier en Javascript si le script est déjà chargé
    Par danou9 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/02/2008, 17h55
  2. [Dates] Vérifier un champ date
    Par @rno0059 dans le forum Langage
    Réponses: 4
    Dernier message: 30/07/2007, 10h28
  3. [Dates] Vérifier date antérieure ou date postérieure
    Par Jiraiya42 dans le forum Langage
    Réponses: 2
    Dernier message: 06/07/2007, 11h43
  4. [Dates] Comparaison de date entre deux IP (anti-flood)
    Par psychoBob dans le forum Langage
    Réponses: 79
    Dernier message: 23/12/2005, 17h19
  5. Script anti popup
    Par chuart dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 18/11/2004, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo