Vous êtes ici Articles > Kit de sécurité PHP

 

Kit de sécurité PHP

Du coté PHP
 
Forty
Vu 4175 fois
Enregistré le 06 Avril 2010
  • Digg cet article sur digg.com
  • Bookmark cet article sur del.icio.us
  • Bookmark cet article sur Google
  • Bookmark cet article sur Yahoo
  • Ajoute Kit de sécurité PHP
  • Partage cet article sur Facebook
 
 
 
 

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.

.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 :
et j'ai jetté un coup d'oeil très rapide au script dans le ZIP et avant d'aller plus ploin je me poser une question :
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+
 
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) )
 
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 +
 
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.
 
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
 
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
 
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.
 
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 ?

 
 
je n'ai aucun problème, même avec des pages avec plusieurs paramètres
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Quelques articles qui devraient vous intéresser