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', false, 403);
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', false, 403);
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);
}
}
?>
|