Kit de sécurité PHP
Du coté PHP
|
|
Kit de sécurité PHP
Pour sécuriser un site il est nécessaire de pouvoir bloquer l'accès au site à des adresses IP hackeuses. La détection de ces IP se fait à l’aide de scripts évolués.
1ere étape
Installation du kit de sécurité
Forty propose ici un kit complet pour bloquer des IPs et stocker le résultat avec MySQL
Vous devez télécharger et installer ce kit dans un premier temps.
Télécharger le kit de sécurité avec stockage des IP en BDD
Si vous le désirez vous pouvez vous arrêter la. Une fois le kit de sécutité de Forty installé votre site est déjà bien protégé… Mais pas totalement car les hackeurs ont bien des ressources en réserves!! Si vous voulez pousser plus loin la sécurité, continuons ensemble et avant de passer à la deuxième étape, voyons comment un hackeur arrive encore à contourner les sécurités de base.
Comment un hakeur contourne t-il MySQL ?
Le problème du kit de base se trouve dans son mode de lecture qui passe par une base de données MySQL (table ip_bl) pour vérifier qu'une adresse IP a déjà été détectée et lui bloquer l'accès. Le hacker va ainsi pouvoir hacker le site internet en lancant massivement des requêtes classiques et ainsi générer un grand nombre de lecture en base de données. Or, si le nombre d'accès concomitant à la base est limité (sur un hébergement mutualisé par exemple), il sera facile de paralyser le site en monopolisant tout les processus disponibles.
La solution consiste donc, une fois que l'adresse IP qui pose problème a été détectée, de sauvegarder un fichier contenant le message à lui afficher systématiquement. Ainsi, quelques lignes dans la configuration Apache permet d'exclure les robots, spammeurs et hackers gênants sans passer constamment par un script PHP et des accès à la base de données.
Lorsqu'une IP est détectée, il suffit de sauvegarder dans un répertoire (dans cet exemple dans le répertoire /cache_ip_bl/ à la racine du site) un fichier dont le nom contient l'adresse IP et dont le contenu est le message à lui renvoyer.
2eme étape
Mise en place des fonctions pour stoker les IP dans des fichiers
Voici maintenant le script php qui va utiliser les fichiers comme méthode de stockage.
Il vous faut remplacer la fonction controle_ip() du kit que vous venez d’ installer (celui de l’étape 1) 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().
Bloquer dynamiquement des IP hack et stocker ces IP dans des fichiers
3eme étape
Mise en place des redirections
Les quelques lignes de ce snippet doivent être ajoutées dans le fichier .htaccess à la racine du site (avant toute autre réécriture car cette règles doit être prioritaire).
Le snippet se résume ainsi:
Si le fichier spécifique à une IP à exclure existe envoyer systématiquement le contenu de ce fichier. La deuxième condition permet d'éviter que la réécriture ne boucle en excluant les fichiers du répertoire cache de cette règle de réécriture.
1ere étape
Installation du kit de sécurité
Forty propose ici un kit complet pour bloquer des IPs et stocker le résultat avec MySQL
Vous devez télécharger et installer ce kit dans un premier temps.
Télécharger le kit de sécurité avec stockage des IP en BDD
Si vous le désirez vous pouvez vous arrêter la. Une fois le kit de sécutité de Forty installé votre site est déjà bien protégé… Mais pas totalement car les hackeurs ont bien des ressources en réserves!! Si vous voulez pousser plus loin la sécurité, continuons ensemble et avant de passer à la deuxième étape, voyons comment un hackeur arrive encore à contourner les sécurités de base.
Comment un hakeur contourne t-il MySQL ?
Le problème du kit de base se trouve dans son mode de lecture qui passe par une base de données MySQL (table ip_bl) pour vérifier qu'une adresse IP a déjà été détectée et lui bloquer l'accès. Le hacker va ainsi pouvoir hacker le site internet en lancant massivement des requêtes classiques et ainsi générer un grand nombre de lecture en base de données. Or, si le nombre d'accès concomitant à la base est limité (sur un hébergement mutualisé par exemple), il sera facile de paralyser le site en monopolisant tout les processus disponibles.
La solution consiste donc, une fois que l'adresse IP qui pose problème a été détectée, de sauvegarder un fichier contenant le message à lui afficher systématiquement. Ainsi, quelques lignes dans la configuration Apache permet d'exclure les robots, spammeurs et hackers gênants sans passer constamment par un script PHP et des accès à la base de données.
Lorsqu'une IP est détectée, il suffit de sauvegarder dans un répertoire (dans cet exemple dans le répertoire /cache_ip_bl/ à la racine du site) un fichier dont le nom contient l'adresse IP et dont le contenu est le message à lui renvoyer.
2eme étape
Mise en place des fonctions pour stoker les IP dans des fichiers
Voici maintenant le script php qui va utiliser les fichiers comme méthode de stockage.
Il vous faut remplacer la fonction controle_ip() du kit que vous venez d’ installer (celui de l’étape 1) 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().
Bloquer dynamiquement des IP hack et stocker ces IP dans des fichiers
3eme étape
Mise en place des redirections
Les quelques lignes de ce snippet doivent être ajoutées dans le fichier .htaccess à la racine du site (avant toute autre réécriture car cette règles doit être prioritaire).
Le snippet se résume ainsi:
Si le fichier spécifique à une IP à exclure existe envoyer systématiquement le contenu de ce fichier. La deuxième condition permet d'éviter que la réécriture ne boucle en excluant les fichiers du répertoire cache de cette règle de réécriture.
|
.01 .02 .03 .04 .05 |
#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]
|
4eme étape (optionelle)
Nettoyage du répertoire qui contient les IP blaclistées
Il ne faut pas oublier un système de nettoyage du répertoire cache (au bout d'une journée par exemple) pour éviter de bloquer à vie une IP qui risque d'être réattribuée à une autre personne plus tard.
|
.01 .02 .03 .04 .05 .06 .07 .08 .09 .10 |
<?php $d = dir("cache_ip_bl"); while($entry = $d->read()) { $path = "cache_ip_bl/".$entry; unlink($path); } ?> |
Et voila !! Bien sur cela devrait vous prendre quelques dizaines de minutes pour installer ce système de sécurité. Mais imaginer le bénéfice si aucun hackeur ne peut plus aspirer, spammer ou mettre en touche votre site. Nous vous laissons le soin d’en tirer les conclusions selon le site qui doit-être sécurisé.
Article écrit par Forty avec la collaboration de Koogar
Commentaires
Salut Forty,
J'ai lu les 3 articles :
Que fais-tu des moteurs de recherche qui viennent Scroller le site ? Parce que MSN et Yahoo par exemple sont capable de te bombarder de requête, genre hier j'avais MSN qui faisait entre 4000 et 6000 requêtes à l'heure et ce pendant 2 ou 3 heures.
Donc comment les distinguer d'une attaque, car le but de ce script serait que tout soit automatiser et qu'iln'y ait plus rien à faire.
Si tu as une idée je suis prenneur, en tout bravo pour le travail, moi je faisais ça mais à la main à partir des logs et en modifiant le .htaccess.
A +
J'ai lu les 3 articles :
- http://www.phpsources.org/kit-de-securite-php_103.html (cette page)
- http://www.phpsources.org/scripts582-PHP.htm
- http://www.phpsources.org/ressources-securite-php171.htm
Que fais-tu des moteurs de recherche qui viennent Scroller le site ? Parce que MSN et Yahoo par exemple sont capable de te bombarder de requête, genre hier j'avais MSN qui faisait entre 4000 et 6000 requêtes à l'heure et ce pendant 2 ou 3 heures.
Donc comment les distinguer d'une attaque, car le but de ce script serait que tout soit automatiser et qu'iln'y ait plus rien à faire.
Si tu as une idée je suis prenneur, en tout bravo pour le travail, moi je faisais ça mais à la main à partir des logs et en modifiant le .htaccess.
A +
Bonjour geolocaliseip,
Normalement les bots étalent les accès dans le temps et répartissent sur plusieurs IP. Le risque est donc faible pour qu'ils soient bloqués. Il est toujours possible d'adapter les limites max dans le script par sécurité ou toujours autoriser certains domaines comme crawl-*.googlebot.com.
A+
Normalement les bots étalent les accès dans le temps et répartissent sur plusieurs IP. Le risque est donc faible pour qu'ils soient bloqués. Il est toujours possible d'adapter les limites max dans le script par sécurité ou toujours autoriser certains domaines comme crawl-*.googlebot.com.
A+
par précaution faudrait envisager une option pour bloquer les 3 bots majeurs (en plus on économise de la ressource) Un moteur qui se fait prendre dans le filet antispam et on a vite fait de se retrouver avec des pages indexées avec la mention "IP interdite" si et seulement si les pages sont en prime fraicheur, car de l'autre coté les moteurs n'iront jamais réindéxer une page déja indéxée qui sait fait prendre dans un antispam, il garderons toujours l'ancienne version de la page
if ( !(strpos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') === false) )
if ( !(strpos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') === false) )
Bonjour Forty et Koogar,
Je suis d'accord avec Forty, les bots normalement étalent leur crawl, mais pas toujours malheureusement et notement en ce qui concerne MSN.
donc ce que propose Koogar est un début de solution, mais je pense que gérer une liste d'exception pour les bots serait plus adequates afin que l'on puisse rajouter les moteurs que l'on veut.
En tout cas encore merci pour ce script et ce site.
a +
Je suis d'accord avec Forty, les bots normalement étalent leur crawl, mais pas toujours malheureusement et notement en ce qui concerne MSN.
donc ce que propose Koogar est un début de solution, mais je pense que gérer une liste d'exception pour les bots serait plus adequates afin que l'on puisse rajouter les moteurs que l'on veut.
En tout cas encore merci pour ce script et ce site.
a +
Contrôler à partir du USER_AGENT c'est risqué car c'est facile à changer. C'est plus sur de mettre au début de la fonction controle_ip() :
$domaine = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$ip_google = str_replace('.', '-', gethostbyname($domaine));
if (preg_match('/^crawl-' . preg_quote($ip_google, '/') . '\.googlebot\.com$/', $domaine)) {
return;
}
Bonjour,
J'ai telecharger le kit de Forty,
J'ai donc modifier le fichier configuration etc.
Mais apres on install comment le tout ?? j'ai raté l'épisode je pense :S
Merci beaucoup de votre aide.
J'ai telecharger le kit de Forty,
J'ai donc modifier le fichier configuration etc.
Mais apres on install comment le tout ?? j'ai raté l'épisode je pense :S
Merci beaucoup de votre aide.
Les instructions se trouve dans le fichier .doc contenu dans le zip : http://www.phpsources.org/ressources-securite-php171.htm
Bonjour à tous ,
Je rencontre un petit soucis, lorsque je passe d'une page avec genre une variable dans l'url à une page avec plusieurs variables dans l'url genre monexemple.php?k=2 vers monexemple2.php?k=2&l=3 à ce moment le script que tu proposes et qui est tres bien à part cela, m'incremente directement le ctp_401 de 1 et a la fini par black list l' ip :(
Aurais tu une soluce ?
MErci
Je rencontre un petit soucis, lorsque je passe d'une page avec genre une variable dans l'url à une page avec plusieurs variables dans l'url genre monexemple.php?k=2 vers monexemple2.php?k=2&l=3 à ce moment le script que tu proposes et qui est tres bien à part cela, m'incremente directement le ctp_401 de 1 et a la fini par black list l' ip :(
Aurais tu une soluce ?
MErci
il ne faut pas appeler la fonction controle_ip avec le paramètre à true pour ne pas incrémenter cpt_401 mais cpt.
Merci de ta réponse
Le truc en apppelant dans mon fichier qui execute mon code soit en faisant
controle_ip($erreur401 = false) ou controle_ip(false);
et dans le fichier de fonction
function controle_ip($erreur401 = false) { et puis la suite
Le probleme est toujours le même le ctp_401 s'incremente de 1 des qu'il y a plus de une variable dans l'url
J'ai retourné ton code dans tout les sens est je deviens chèvre :)
Merci d'avnace si tu as une idée
Le truc en apppelant dans mon fichier qui execute mon code soit en faisant
controle_ip($erreur401 = false) ou controle_ip(false);
et dans le fichier de fonction
function controle_ip($erreur401 = false) { et puis la suite
Le probleme est toujours le même le ctp_401 s'incremente de 1 des qu'il y a plus de une variable dans l'url
J'ai retourné ton code dans tout les sens est je deviens chèvre :)
Merci d'avnace si tu as une idée
la valeur par défaut étant false tu peux mettre : controle_ip();
sinon je ne comprends pas pourquoi le fait de mettre plusieurs paramètres à l'url influence le fonctionnement.
sinon je ne comprends pas pourquoi le fait de mettre plusieurs paramètres à l'url influence le fonctionnement.
Ba pour être honnête moi non plsu c'est ça le hic ou je coince lol, et je pensais que tu aurais une tite idée :(
Tu avias essayer avec plusieurs vairables dans l'url ?
Tu avias essayer avec plusieurs vairables dans l'url ?
je n'ai aucun problème, même avec des pages avec plusieurs paramètres
Ajouter un commentaire
Quelques articles qui devraient vous intéresser










Connexion
Les derniers!

