Vous êtes ici Codes PHP et MySQL > Sécurité > Bloquer dynamiquement des IP hack et stocker ces...

 

Bloquer dynamiquement des IP hack et stocker ces IP dans des fichiers

Le code ci-dessous est une adaptation du script téléchargeable ici : http://www.phpsources.org/ressources-securite-php171.htm
Il faut installer ce script zippé au préalable puis remplacer la fonction controle_ip() par celle donnée ci-dessous et ajouter les deux nouvelles fonctions qui gèrent les fichiers : get_ip_bl_cache_name() et sauve_ip_bl_cache().

Contrairement au script d'origine, celui-ci permet d'exclure l'adresse IP sans qu'il puisse encore utiliser les ressources PHP et MySQL. En effet le blocage se fait uniquement à partir d'un fichier texte et de quelques lignes dans un fichier de configuration Apache .htaccess.
 
forty
Site de l'auteur voir
[21] sources en PHP voir
Code vu 1490 fois
Enregistré le 03 Avril 2010
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Bloquer dynamiquement des IP hack et stocker ces IP dans des fichiers
  • Partage ce code sur Facebook
 
 
 
 

Code Source


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.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Bloquer dynamiquement des IP hack et stocker ces IP...    */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts582-PHP.htm              */
/* Auteur         : forty                                                     */
/* Date édition   : 03 Avril 2010                                             */
/* Website auteur : http://www.toplien.fr/                                    */
/*                                                                            */
/******************************************************************************/

/* les 4 lignes suivantes sont à ajouter dans le fichier .htaccess : 
#bloque l'accès au site suite à l'abus d'une adresse IP
RewriteCond %{DOCUMENT_ROOT}/cache_ip_bl/%{REMOTE_ADDR}.html -f
RewriteCond $1 !^cache_ip_bl/
RewriteRule ^(.*)$ /cache_ip_bl/%{REMOTE_ADDR}.html [L]
*/

// ce chemin est à adapter en fonction de vos besoins et doit rester cohérent
// avec ce qui est déclaré dans le fichier .htaccess
define('DIR_CACHE_IP_BL'$_SERVER['DOCUMENT_ROOT'] . '/cache_ip_bl');

// Le code ci-dessous est une adaptation du script visible ici :
// http://www.phpsources.org/ressources-securite-php171.htm
// il faut donc installer ce script au préalable puis remplacer la fonction
// controle_ip() et ajouter les deux autres : get_ip_bl_cache_name() et sauve_ip_b
//l_cache()

// détermine le chemin d'un fichier cache pour bloquer une IP
function get_ip_bl_cache_name($ip '') {
    $ip_tmp = (empty($ip) ? $_SERVER['REMOTE_ADDR'] : $ip);
    return DIR_CACHE_IP_BL '/' $ip_tmp '.html';
}

// sauvegarde un fichier cache pour bloquer une IP
function sauve_ip_bl_cache($texte$ip '') {
    if (empty($ip)) {
        @create_file(get_ip_bl_cache_name(), $texte 'Les adresses IP utilisant trop de ressources ou accédant à des pages' .
' protégées sont bloquées pour concentrer les ressources disponibles sur les' .
' visiteurs normaux du site.');
    } else {
        @create_file(get_ip_bl_cache_name($ip), $texte 'Les adresses IP utilisant trop de ressources ou accédant à des pages' .
' protégées sont bloquées pour concentrer les ressources disponibles sur les' .
' visiteurs normaux du site.');
    }
}

// contrôle qu'une adresse IP ne charge pas trop de pages par minute ou trop de
// pages interdites
function controle_ip($erreur401 false) {
    $date_time_array getdate();
    $hours $date_time_array['hours'];
    $minutes $date_time_array['minutes'];
    $seconds $date_time_array['seconds'];
    $month $date_time_array['mon'];
    $day $date_time_array['mday'];
    $year $date_time_array['year'];
    $date date('Y/m/d H:i'mktime($hours$minutes$seconds$month$day-1,
 $year));
    $date_as my_mysql_real_escape_string($date);
    $sql_ip "DELETE FROM ip WHERE date < '$date_as' ";
    $res_ip my_mysql_query($sql_ip);

    $domaine gethostbyaddr($_SERVER['REMOTE_ADDR']);
    $ip_as my_mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
    $domaine_as my_mysql_real_escape_string($domaine);
    $date date('Y/m/d H:i');
    $date_as my_mysql_real_escape_string($date);
    $ua_as my_mysql_real_escape_string(empty($_SERVER['HTTP_USER_AGENT'])?'':
$_SERVER['HTTP_USER_AGENT']);
    $sql_ip "SELECT * FROM ip WHERE ip = '$ip_as' ";
    $res_ip my_mysql_query($sql_ip);
    if (($res_ip mysql_fetch_array($res_ip,MYSQL_ASSOC)) !== false) {
        if ($erreur401) {
            $cpt_401 $res_ip['cpt_401'] + 1;
            if ($cpt_401 >= LIMITE_401) {
                $cpt $res_ip['cpt'];
                $cpt_as my_mysql_real_escape_string($cpt);
                $cpt_401_as my_mysql_real_escape_string($cpt_401);
                sauve_ip_bl_cache('Vous avez visualisé plus de ' LIMITE_401 ' pages protégées. ');
                //creation des messages
                $message_erreur '<font color="#ff0000">';
                $message_erreur .= 'IP bannie car ' LIMITE_401 ' erreurs de mot de passe : ' $_SERVER['REMOTE_ADDR'] . '</font><br><br>';
                $url_erreur_complete get_complete_url();
                $message_erreur .= 'Voici l\'url source : <a href="' htmlspecialchars($url_erreur_complete) . '">' $url_erreur_complete '</a><br><br>';
                if (isset($_SERVER['HTTP_REFERER'])) {
                    $message_erreur .= 'Voici la page d\'origine : <a href="' htmlspecialchars($_SERVER['HTTP_REFERER']) . '">' $_SERVER['HTTP_REFERER'] . 
'</a><br><br>';
                }
                if (isset($_SERVER['HTTP_USER_AGENT'])) {
                    $message_erreur .= 'Navigateur : ' $_SERVER[
'HTTP_USER_AGENT'] . '<br><br>';
                }
                $message_erreur .= 'Nom de domaine : ' $domaine '<br><br>';
                $message_erreur .= '<a href="http://' $_SERVER['HTTP_HOST'] . 
CHEMIN_RACINE 'admin/ip_bloque.php?ip=' urlencode($_SERVER['REMOTE_ADDR']) .
 '">Débloquer</a><br><br>';
                //envoi du message eu webmaster pour le prevenir de l'erreur
                send_mail('IP bannie'$message_erreur);
                header('Status: 403 Forbidden'false403);
                die('IP interdite pour abus.');
            } else {
                $sql_ip "UPDATE ip SET cpt_401=cpt_401+1, date='$date_as', ua='$ua_as'," .
" domaine='$domaine_as' WHERE ip='$ip_as' ";
                $res_ip my_mysql_query($sql_ip);
            }
        } elseif ($res_ip['date'] == $date) {
            $cpt $res_ip['cpt'] + 1;
            if ($cpt >= LIMITE_404) {
                $cpt_401 $res_ip['cpt_401'];
                $cpt_as my_mysql_real_escape_string($cpt);
                $cpt_401_as my_mysql_real_escape_string($cpt_401);
                sauve_ip_bl_cache('Vous avez visualisé plus de ' LIMITE_404 ' pages inexistantes en une minute. ');
                //creation des messages
                $message_erreur '<font color="#ff0000">';
                $message_erreur .= 'IP bannie car plus de ' LIMITE_404 ' requêtes en 1 minute : ' $_SERVER['REMOTE_ADDR'] . "</font><br><br>";
                $url_erreur_complete get_complete_url();
                $message_erreur .= 'Voici l\'url source : <a href="' htmlspecialchars($url_erreur_complete) . '">' $url_erreur_complete '</a><br><br>';
                if (isset($_SERVER['HTTP_REFERER'])) {
                    $message_erreur .= 'Voici la page d\'origine : <a href="' $_SERVER['HTTP_REFERER'] . '">' $_SERVER['HTTP_REFERER'] . '</a><br><br>';
                }
                if (isset($_SERVER['HTTP_USER_AGENT'])) {
                    $message_erreur .= 'Navigateur : ' $_SERVER[
'HTTP_USER_AGENT'] . '<br><br>';
                }
                $message_erreur .= 'Nom de domaine : ' $domaine '<br><br>';
                $message_erreur .= '<a href="http://' $_SERVER['HTTP_HOST'] .
  CHEMIN_RACINE 'admin/ip_bloque.php?ip=' urlencode($_SERVER['REMOTE_ADDR'])
 . '">Débloquer</a><br><br>';
                send_mail('IP bannie'$message_erreur);
                header('Status: 403 Forbidden'false403);
                die('IP interdite pour abus.');
            } else {
                $sql_ip "UPDATE ip SET cpt=cpt+1, date='$date_as', ua='$ua_as', domaine='$domaine_as'" .
" WHERE ip='$ip_as' ";
                $res_ip my_mysql_query($sql_ip);
            }
        } else {
            $sql_ip "UPDATE ip SET cpt=1, date='$date_as', ua='$ua_as', domaine='$domaine_as'" .
" WHERE ip='$ip_as' ";
            $res_ip my_mysql_query($sql_ip);
        }
    } else {
        if ($erreur401) {
            $cpt 0;
            $cpt_401 1;
        } else {
            $cpt 1;
            $cpt_401 0;
        }
        $cpt_as my_mysql_real_escape_string($cpt);
        $cpt_401_as my_mysql_real_escape_string($cpt_401);
        $sql_ip "INSERT into ip (ua, ip, domaine, date, cpt, cpt_401) values ('$ua_as'," .
" '$ip_as', '$domaine_as', '$date_as', '$cpt_as', '$cpt_401_as')";
        $res_ip my_mysql_query($sql_ip);
    }
}

?>

 

Fonctions du code

: Définit une constante - (PHP 4, PHP 5)
: Détermine si une variable contient une valeur non nulle - (PHP 4, PHP 5)
: Retourne la date/heure - (PHP 4, PHP 5)
: Formate une date/heure locale - (PHP 4, PHP 5)
: - (PHP 4, PHP 5)
: Retourne le nom d'hôte correspondant à une IP - (PHP 4, PHP 5)
: - (PHP 4, PHP 5, PECL mysql:1.0)
: Convertit les caractères spéciaux en entités HTML - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: Encode une chaîne en URL - (PHP 4, PHP 5)
: Envoie un en-tête HTTP - (PHP 4, PHP 5)
: Alias de la fonction exit() - (PHP 4, PHP 5)
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

Sécurité

 
 

PHP

 
 
 
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
        Publicité