Articles en ligne

Un article de HackaWiki.

Les collaborateurs de nos journaux sont libres et mêmes invités à utiliser cet espace pour publier électroniquement ceux de leurs articles qu'ils jugent - en toute humilité - nécessaire de partager.

Sommaire

The Hackademy Journal

N°13

N°16

N°18

N°19

N°20


The Hackademy Manuel

N°5

N°8

N°9

N°10

N°11

N°12

N°13


The Hackademy Magazine

N°1

N°2

N°3

N°4

N°5


Articles proposés uniquement sur HackaWiki


Divers

Texte (brut) du Manuel 10 : iptables et Perl


Disponibles via P2P

  • THJ-20 : ed2k://|file|[French ebook] The Hackademy Journal -n20 - Juin-Juillet 2005.pdf|14292528|5BB9F055680B0E47B4578BC89C0797F4|/
  • mini-guide anonymat : ed2k://|file|Hackademy Cours Anonymat.pdf|2362562|1D70E31B9D98669BCDA1BE84192D8245|/


The Hackademy PROG

N°7

Logger les erreurs : le code

<?php
/* GESTION DES ERREURS
* Si la constante repertoire_log n'est pas définie (ceci permet de choisir le
* répertoire de destination dans le fichier PHP où l'on inclut celui-ci, utile
* lorsqu'ils ne se trouvent pas tous au même niveau)... 
*/
if ( !defined('repertoire_log') ){
     // ...alors il l'a défini avec comme valeur log/
     // (ce répertoire contiendra le classement des erreurs,
     // à vous de le créer)
     define ( "repertoire_log","log/") ;
}

/* Constante permettant de choisir si le mode de ban IP est activé.TRUE pour
* le mode activé, FALSE pour le mode désactivé.*/
define("ban_active",TRUE);

// Constante permettant de choisir à partir de combien d'erreurs l'IP se fait bannir.
define("nb_avert", 3 ) ;

//Constante permettant de définir le message lorsque l'IP est ban.
define("message_ban","Adresse IP bannie contactez l'admin");

//Si le mode du ban est activé...
if(ban_active)
{
     // ... alors si is_ban() retourne vrai, afficher le message du ban et
     // stopper l'exécution du script.
     if(is_ban()){echo message_ban;exit;}
}

/* Redirection des erreur vers la fonction recupere_e set_error_handler("recupere_e");
* Que l'on définit ici :*/

function recupere_e($errno, $errstr, $errfile, $errline){
     /* $errno contient le type de 1'erreur(int)
     *  $errstr contient le message d'erreur
     *  $errfile contient le fichier où se trouve l'erreur
     *  $errline contient la ligne de l'erreur
     *  
     *  $errno  est  un  nombre,  nous  nous  limiterons  à détecter les valeurs
     *  suivantes :
     *  1	    E_ERROR
     *  2     E_WARNING
     *  8     E_NOTICE
     *  256   E_USER_ERROR
     *  512   E_USER_WARNING
     *  1024  E_USER_NOTICE
     */
     switch ($errno) {
          //si $errno est égal à E_USER_ERROR soit 256... 
          case E_USER_ERROR :
               $type="Fatal :\n";
               break;
          //si $errno est égal à E_USER_WARNING soit 512... 
          case E_USER_WARNING :
               $type="Erreur:\n" ;
               break;
          //si $errno est égal à E_USER_NOTICE soit 1024... 
          case E_USER_NOTICE :
               $type="WAKNING:\n";
               break;
          //si $errno est égal à E_ERROR soit I... 
          case E_ERROR :
               $type="Fatal:\n";
               break;
          //si $errno est égal à EWARNING soit 2... 
          case E_WARNING :
               $type="Erreur:\n";
               break;
          //si $errno est égal à ENOTICE soit 8... 
          case E_NOTICE:
               $type="WARNING:\n";
               break;
          //Dans tous les autres cas 
          default:
               $type="lnconnu:\n";
               break;
     }
     //On renvoie la capture à la fonction de traitement. 
     traitement_e($type."[$errno] $errstr\n".
     "Ligne: ".$errline.
     " Fichier: ".$errfile."\n");
}

function traitement_e($erreur)
{
     //$erreur contient le message d'erreur.
     //$info = date:jour-mois-anne heure:minute:seconde + IP du client...
     $info=date("d/m/Y H:i:s",time())." : ".$_SERVER['REMOTE_ADDR'].
     //+ Serialisation du tableau $_GET, soit toute les variables
     // passer par URL...
     "\n\t GET:".serialize($_GET).
     //+ Serialisation du tableau $_POST, soit toutes les
     // variables passées par méthode POST...
     "\n\t POST:".serialize($_POST).
     //+ si la variable $_COOKIE est définie, alors renvoie 
     //Serialisation du tableau $_COOKIE, soit tout le contenu 
     // du cookie, sinon renvoie " Undefined ". 
     "\n\t COOKIE:".
      (isset($_COOKIE) ? serialize($_COOKIE) : "Undefined" ).
     //+ Si la variable $_SESSION est définie, alors renvoie 
     //Serialisation du tableau $_SESSION, soit toutes 
     // les variables contenues dans la session, sinon renvoie 
     // " Undefined ". 
     "\n\t SESSION:".
      (isset($_SESSION) ? serialize($_SESSION) : "Undefined" ).
     //+ Serialisation du tableau $_SERVER, soit toutes
     // les variables Serveur...
     "\n\tSERVER:".serialize($_SERVER)."\n\n"; 
     
     //$rep = répertoire où sont contenus les logs concaténés au 
     // jour-mois-année actuels. $rep=repertoire_log.date("d-m-Y",time()); 
     //Si le répertoire $rep n'existe pas... 
     if(!is_dir($rep))
     {
          //alors crée le répertoire (crée le répertoire 
          //jour-mois-annee actuel). S'il échoue, renvoie un message 
          //et stoppe la fonction. 
          if(!@mkdir($rep))
          {
               echo "Vérifier l'existence du répertoire "
                    .repertoire_log; 
               return FALSE;
          }
     }
     // $fp= ouvre le fichier se trouvant dans $rep du nom de l'heure // actuelle concatenée à "h" en mode ajout. Si le fichier n'existe pas, // il se crée. $fp = fopen($rep.7".date("H",time())."h","a");
     // Rajoute dans le fichier, à la fin, $erreur et $info, soit les
     // informations de l'erreur et les informations du visiteur.
     fwrite($fp,$erreur.$info);
     //Ferme le fichier.
     fclose($fp);
     //Si le mode ban est activé...
     if(ban_active)
     {
          // alors ajouter un avertissement, retourne TRUE si l'IP, 
          // suite à l'avertissement, est ban ; FALSE autrement. 
          if(ban_ip())
          {
               //Affiche le message de ban. écho message_ban; 
               //Stoppe l'exécution du script. 
               exit;
          }
     }
}
function ban_ip()
     {
     //$fichier = répertoire où sont contenus les logs plus l'IP 
     $fichier=repertoire_log.$_SERVER['REMOTE_ADDR'].".ip";
     
     //Si $fichier concatené à " .tmp " est un fichier et qu il existe... 
     if(is_file($fichier.".tmp"))
     {
          // ...ouvrir ce fichier en lecture. 
          $fp=fopen($fichier.".tmp",'r');
          
          //$avert = a la valeur contenue dans le fichier
          //(un nombre correspondant au nombre d'avertissements).
          $avert=fread($fp,filesize($fichier.".tmp"));
          
          //Ferme le fichier. 
          fclose($fp);
          
          //Ajoute un avertissement. 
          $avert++;
          
          //Si le nombre d'avertissements est supérieur au nombre 
          //d'avertissements tolérés... 
          if($avert>nb_avert)
          {
               //alors renommer le fichier $fichier.tmp en $fichier 
               //(transforme le fichier d'avertissement en fichier 
               // de ban).
               rename($fichier.".tmp",$fichier);
               
               //La fonction se termine et renvoie TRUE
               // (soit que l'IP est ban).
               return TRUE;
          }
     //Sinon (si $fichier concatené à " .tmp " n'existe pas...) 
     } else {
          //Si on bannit sans avertissement...
          if(nb_avert==0)
          {
               //ouvre le $fichier (le crée).
               $fp = fopen($fichier,"w");
               
               //Écrit 0 dedans
               //(juste pour la référence de dire 0 avertissement).
               fwrite($fp,"O");
               
               //Ferme le fichier.
               fclose($fp);
               
               //La fonction se termine et renvoie TRUE
               //(l'IP est bannie).
               return TRUE;
          }
          
     //$avert=l correspond à son premier avertissement.
     $avert= 1 ;
     }
     //Ouvre le fichier $fichier concatené à " .tmp " en mode écriture
     // (crée le fichier s'il n'existe pas, ou écrase le contenu s'il existe).
     $fp = fopen($fichier.".tmp","w");
     
     //Écrit dans le fichier le nombre d'avertissements.
     fwrite($fp,$avert);
     
     //Ferme le fichier.
     fclose($fp);
     
     //La fonction se termine et renvoie FALSE
     // (l'IP n'est pas bannie par cet avertissement).
     return FALSE;
     }
     
function is_ban(){
     //Si le fichier contenu dans le répertoire répertoire_log du nom de // l'ip concatenée à " .ip " existe... 
     if(is_file(repertoireJog.$_SERVER['REMOTE_ADDR'].".ip"))
     {
          //alors la fonction renvoie TRUE (l'IP est bannie).
          return TRUE;
     }else{
          //Sinon la fonction se termine et renvoie FALSE (l'IP n'est pas bannie).
          return FALSE;
     }
}
?>

Ce qui vous manque ?

  • [Merci de rajouter ici ce que vous désirez voir comme articles via la commande "Modifier"]

---> tout ce qui touche aux forum phpBB2 - prise de controle ...

Épuisés