Ajouter un logfile au panel d'administration

B'jour à tous,


Continuant de m'amuser avec PluXml, j'ai ajouté un petit fichier contenant les logs d'accès au panel d'administration, si vous aussi vous êtes paranoïaque (Comme moi, quoi), j'expliquerais ici la mise en place de ce log.


Dans cet article, j'expliquerais la mise en place d'un fichier contenant les logs de certaines actions :


1 : Tentative de connexion au panel d'administration
2 : Connexion au panel d'administration
3 : Déconnexion du panel d'administration


De cette manière, vous saurez exactement ce qu'il se passe lorsque vous n'êtes pas là. Et ça, c'est bien.


Etape 1 : Modification du auth.php (base)


Nous allons commencer par ajouter deux fonctions au fichier /pluxml/core/admin/auth.php, fonctions qui nous seront utiles pour ajouter des entrées à notre log.


Commencez par sauvegarder votre fichier auth.php (Juste au cas où !), puis connectez vous à votre FTP contenant votre dossier pluxml avec votre client FTP préféré, parcourez les dossiers /pluxml/core/admin/ et téléchargez le fichier auth.php, puis enfin ouvrez le avec votre éditeur de texte favoris.


Nous allons ajouter deux fonctions PHP au fichier auth.php ainsi que 3 variables que nous utiliserons plus tard, les voici :

/**************************************************************************************************
** Modification permettant la mise en log des visiteurs ayant essayés d'allez sur le panel admin  *
**       Je recommande de mettre ce code au début du fichier /pluxml/core/admin/auth.php          *
**************************************************************************************************/

// Fonction ajoutant une entrée au logfile : $str : La chaine, $action : L'action (Essai connexion, disconnect, connection...)
function addInLogFile($str, $action)  {
  if(!is_dir("logs")) {
    mkdir("logs", 0764);
  }
  $dh = fopen("logs/logs.php","a");
  fputs($dh, $str."$action<br /><br />");
  fclose($dh);
}

// Fonction retournant l'hostname de l'adresse IP 
function getHostname($ip)  {
  $ptr = implode(".",array_reverse(explode(".",$ip))).".in-addr.arpa";
  $host = dns_get_record($ptr);
  return $host;
}

// Et enfin on note quelques informations de l'utilisateur 
$ip  = htmlspecialchars($_SERVER['REMOTE_ADDR']); // Oui, je suis paranoïaque
$usr = htmlspecialchars($_SERVER['HTTP_USER_AGENT']);
$h   = print_r(getHostname($ip), true);

/**************************************************************************************************
**                                     Fin des modifications                                      *
**************************************************************************************************/


Je vous recommande de les ajouter au début du fichier auth.php, juste après ceci :
<?php

/**
 * Page d'authentification
 *
 * @package PLX
 * @author	Stephane F et Florent MONTHEL
 **/



Etape 2 : Modification du fichier auth.php (Ajouts aux log)


Nous allons ensuite ajouter le code d'ajout au log :


1) Tentative de connexion :


Après les lignes suivantes (130 et 131 dans Pluxml 5.1.6) :
  else {
		$msg = L_ERR_WRONG_PASSWORD;


Ajoutez ceci :
    // Ajoute les essais de connexions erronés au logfile 
    $l = htmlspecialchars($_POST['login']);
    $pwd = htmlspecialchars($_POST['password']);
    addInLogFile("<br>".date("d-m-Y")." @ ".date("H:i")." ".$ip." <br> ".$usr."<br>".$h."<br />","Login failed : $l / $pwd ");


2) Connexion réussie au panel d'administration :


Après la ligne suivante (122 dans Pluxml 5.1.6) :
if($connected) {

Ajoutez ceci :
    // Modification ajoutant les connexions au log 
    $_SESSION['isConnected'] = 1;
    addInLogFile("<br>".date("d-m-Y")." @ ".date("H:i")." ".$ip." <br> ".$usr."<br>".$h."<br />","Login successfull");


3) Déconnexion du panel d'administration :


Après la ligne suivante (78 dans Pluxml 5.1.6) :

if(!empty($_GET['d']) AND $_GET['d']==1) {

Ajoutez ceci :
  // Modification ajoutant au logfile les deconnexions du panel admin
  addInLogFile("<br />".date("d-m-Y")." @ ".date("H:i")." ".$ip." <br /> ".$usr."<br />".$h."<br />","Admin disconnect");


Et bien entendu, réuploadez le fichier auth.php, en écrasant l'ancien.


Désormais, lorsque quelqu'un essaiera de se connecter à votre panel d'administration, lorsque quelqu'un se connectera et lorsque quelqu'un se déconnectera de votre panel d'administration, ceci sera notifié dans le fichier /pluxml/core/admin/logs/logs.php


Sécuriser le fichier logs.php


La dernière étape (Très importante) sera de sécuriser le fichier logs/logs.php, afin que tout le monde ne puisse pas y accéder. Il vous faudra être connecté au panel d'administration Pluxml pour pouvoir y accéder.


Nous allons commencer par créer le fichier logs/logs.php : Vous pouvez sois le créer manuellement, ou vous pouvez simplement vous déconnecter & reconnecter à votre panel d'administration Pluxml : Celui-ci sera créer automatiquement.


Téléchargez ensuite le fichier logs.php, ouvrez le avec votre éditeur de texte, puis ajoutez ceci à la toute première ligne :
<?php
session_start();
if(!isset($_SESSION['isConnected']))  {
  header('Location:http://perdu.com');
  exit();
}
?>

Toute personne essayant d'accéder au fichier logs.php sans être connecté sera redirigé, et ne pourra donc pas y accéder. Réuploadez le fichier logs.php en écrasant l'ancien, et voilà, le tour est joué.

Ciao à tous.

Réponses

  • Jerry WhamJerry Wham Member
    juillet 2012 modifié
    Super bonne idée. Seulement à chaque mise à jour de Pluxml (sauf si c'est adopté par l'équipe), cette modification sera écrasée.

    Et sous la forme d'un plugin, n'est pas faisable ?


    Tu disposes de plusieurs hook :
    - AdminAuthPrepend,
    - AdminAuthEndHead,
    - AdminAuthTop,
    - AdminAuth,
    - AdminAuthEndBody

    qui permettent d'éviter la modification des fichiers core directement tout en permettant l'ajout de telles fonctionnalités.

    EDIT : aussitôt dit, aussitôt fait, voici le plugin
  • MordredMordred Member
    juillet 2012 modifié
    Et bien, quelle réactivité :D ! Et après on me demande pourquoi je suis fan de ce CMS.


    J'avais pensé à faire ça sous la forme de plugin intégré à PluXml, seulement je savais pas trop quelle classe utiliser, etc ... D'ailleurs il faudrait que je m'y mette.


    Merci à toi pour avoir inclus ceci sous forme de plugin, ça m'arrangera moi aussi (J'étais réticent à chaque update de PluXml, vu que j'utilise une version un peu personnalisée ...)
  • Jerry WhamJerry Wham Member
    juillet 2012 modifié
    J'ai un peu modifié le plugin
Connectez-vous ou Inscrivez-vous pour répondre.