Anti flood basique - MySQLi

  Information

Les anti flood sont importants pour vos sites web.

Cela empeche surtout les robots de spammer vos sites web, en donnant une limite de temps entre chaque appel de pages.

Le principe :

  • Donner un temps entre chaque chargement de page, 10 secondes par exemple
  • Le code envoie une requete avec l'ip du visiteur + l'heure à laquel une page est chargée.
  • Pour la vérification, si l'ip du visiteur existe et que le temps est inférieur à 10 secondes, c'est qu'il spam très certainement
  code source classé dans  Sécurité

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
 35    
 36    
 37    
 38    
 39    
 40    
 41    
 42    
 43    
 44    
 45    
 46    
 47    
 48    
 49    
 50    
 51    
 52    
 53    
 54    
 55    
 56    
 57    
 58    
 59    
 60    
 61    
 62    
 63    
 64    
 65    
                               
<?php
/*---------------------------------------------------------------*/
/*
    Titre : Anti flood basique - MySQLi                                                                                   
                                                                                                                          
    URL   : https://phpsources.net/code_s.php?id=201
    Date édition     : 13 Jan 2007                                                                                        
    Date mise à jour : 19 Sept 2019                                                                                      
    Rapport de la maj:                                                                                                    
    - refactoring du code en PHP 7                                                                                        
    - fonctionnement du code vérifié                                                                                    
*/
/*---------------------------------------------------------------*/?>
      CREATE TABLE flood (
      ip varchar(18) NOT NULL default '',
      dernier int(11) NOT NULL default '0',
      PRIMARY KEY  (ip)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

<?php

    // COMMENT PROCÉDER ??


    $time_flood '10'// 10 secondes

    $db_server 'localhost'// Adresse du serveur MySQL
    $db_name '';            // Nom de la base de données
    $db_user_login 'root';  // Nom de l'utilisateur
    $db_user_pass '';       // Mot de passe de l'utilisateur

    // Ouvre une connexion au serveur MySQL
    $conn mysqli_connect($db_server,$db_user_login$db_user_pass$db_name);

    // ip du client
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    $ip $_SERVER['REMOTE_ADDR'];
    }

    // 1° d'abord commencer par supprimer tout ceux dont le temps a expirer
    $conn->query("DELETE FROM flood WHERE dernier + $time_flood < " time());

    // 2° ensuite prenez l'ip du visiteur
    $q $conn->query("SELECT dernier
                       FROM flood
                       WHERE ip='$ip'");

    // 3° Si l'Ip du visiteur est déjà dans la table, ai !!
    if($q->num_rows )
        echo 'vous spammez !';

       
    // 4° sinon tout va bien, reste plus qu'a insérer
    //    l'ip de votre visiteur dans la table

    else mysql_query("INSERT INTO flood
                     VALUES ('$ip', '" time() . "')");

?>

          Fonctions du code - Doc officielle PHP

   php.net   Description Versions PHP OUTIL
   echo Affiche une chaîne de caractères PHP 4, PHP 5, PHP 7, PHP 8
   empty Détermine si une variable contient une valeur non nulle PHP 4, PHP 5, PHP 7, PHP 8
   mysqli_connect Ouvre une connexion à un serveur MySQL PHP 5, PHP 7, PHP 8
   mysql_query Envoie une requête à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLÈTE en PHP 5.5.0, et ont été supprimées en PHP 7.0.0
   time Retourne le timestamp UNIX actuel PHP 4, PHP 5, PHP 7, PHP 8

   Dites merci aux auteurs pour leurs travail, ça ne coûte rien et ça fait toujours plaisir wink

[6]

  • avatar

    Invité

    06 Aout 2010 à 19:52

     Salut à tous, en faite il faut faire comme ça: <?php 

    $time_flood '30'// 30 secondes 
    ?>
    Merci d'avance

  • avatar

    KOogar

    13 Juin 2010 à 14:33

    Pour monter la table tu peux utiliser phpMyAdmin et le reste du code c'est du pur php donc utilise un script avec une extension php  

  • avatar

    Invité

    13 Juin 2010 à 13:46

    bonjour, juste une question, au niveau du serveur, sa se pose dans quelle fichier et a quel place

  • avatar

    KOogar

    10 Jan 2010 à 23:21

    Merci pour le signalement. C'est corrigé, il y avait un petit problème de cache avec cette page.

  • avatar

    Invité

    10 Jan 2010 à 18:42

    Joli

    if(mysql_num_rows($resultat) > ???)

  • avatar

    Furious

    19 Mars 2008 à 10:42

    Fonctionne très bien ! Par contre pour ceux qui sont un peu embrouillés, il faut prendre juste la partie : "Comment procéder". ;)


 Autres snippets qui pourraient vous intéressez

Moteur de recherche basique / MySQLi

Compatibilité : PHP 5, PHP 7

Le mot est entré via 1 formulaire puis la recherche se fait sur la table SQL. La variable $recherche est envoyée par le formulaire qui lui est fourni dans le source.

Ouvrir une connexion MySQLi

Compatibilité : PHP 5, PHP 7

Exemples MySQL dans la syntaxe MySQLi et PDO. Trois façons d'ouvrir une connexion à MySQL (procédural, orienté objet et PDO

Sondage complet MySQLi + PHP

Compatibilité : PHP 5, PHP 7

Un sondage avec une seule table SQL et avec une vérification de l'ip afin de vérifier si le visiteur a déjà voté ou n'a pas encore voté.

Moteur de recherche simple / MySQLi

Compatibilité : PHP 5, PHP 7

Un moteur de recherche nécessitant une table MySQLi qui exécute la recherche sur une table avec la requête LIKE. Une table SQL en exemple est fournie.

Moteur de recherche multi fonctions / MySQLi

Compatibilité : PHP 5, PHP 7

Moteur de recherche qui créer la requête pour une recherche dans une table SQL en mode multi fonctions (et, ou, la phrase exacte)

Présentation de PHP

PHP débutant et initié 50 Tutoriel

Présentation de MySQL

  13 Jan 2007

Information sur les mises à jour

Dernière mise à jour :

    19 Sept 2019
    refactoring du code en PHP 7
    fonctionnement du code vérifié

13 625 Vues
Compatibilité
PHP 5, 7 et 8+