Audit des changements
controle de changement sur la racine du site phpboost
Créations de Modules
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
j'aimerais integrè un script d'audit sur la racine de mon site;le script marche bien ,mais je veux bien l'integré dans l'environnement phpboost ,pour plus de protection.
mais j'ai l'erreur suivante:
Citation :
Jeton de session invalide. Veuillez essayer de recharger la page car l'opération n'a pas pu être effectuée.
Voici le code:
Citation :
<?php
###################################################*/
define('PATH_TO_ROOT', '.');
//Début du chargement de l'environnement
include_once('./kernel/init.php');
//Chargement d'un fichier css, ici le fichier css du module news
define('ALTERNATIVE_CSS', 'design');
//Titre de la page, ici Accueil
define('TITLE', 'Accueil');
//Chargement de l'environnement ( header )
require_once('./kernel/header.php');
//Chargement des fichiers de langue et autres
global $LANG,$CONFIG;
###################################################*/
$go_back = 0; // affiche résultat ou non
$i = 0; // compteur de boucle
$dir_count = 0; // initialisation de la boucle
$date = time(); // date et heure actuelle
$one_day = 86400; // nombre de secondes pour une journée
$days = preg_replace("/[^0-9]/i",'', $_POST["jours"]); // nombre de jours à vérifier
$path = preg_replace("/[^_A-Za-z0-9-\.%\/]/i",'', $_POST["chemin"]); // chemin de fichier absolu (avec nettoyage contre piratage)
$path = preg_replace("/\.\.\//",'', $path); // on interdit la commande ../
define('ABSPATH', dirname(__FILE__));
$path = ABSPATH.$path; // chemin de fichier absolu de votre compte du genre /home/loginftp/www/ ou /home/loginftp/public_html/ etc.
$directories_to_read[$dir_count] = $path;
// Formulaire pour remonter le temps
print "<html><body><h3>Contrôle des derniers fichiers modifiés
dans votre hébergement .</h3>";
print "<table><tr><td>";
print "<form method=\"post\">";
print "<tr><td>Nombre de jours à vérifier 1-99: </td>";
print "<td> <input type=\"text\" name=\"jours\" maxlength=\"2\" size=\"2\"></td></tr>";
print "<tr><td>Nom du répertoire à contrôler: </td>";
print "<td>".ABSPATH." <input type=\"text\" name=\"chemin\" maxlength=\"80\" size=\"30\" value=\"/\" > (mettre un / à la fin)</td></tr>";
print "<tr><td> </td><td><input type=\"submit\" value=\" Vérifier Fichiers \">";
print "</form>";
print "</td></tr></table>";
// Affichage du résultat
$go_back = $one_day * $days;
print "
Retour sur les " . ($go_back/$one_day) ." derniers jours.
";
if ( $go_back > 0 ){
print "<table><tr><th>Nom du Fichier</th><th>Date de modification</th></tr>";
$diff = $date - $go_back;
while ( $i <= $dir_count ){
$current_directory = $directories_to_read[$i];
// obtenir info fichier
$read_path = opendir( $directories_to_read[$i] );
while ( $file_name = readdir( $read_path)){
if (( $file_name != '.' )&&( $file_name != '..' )){
if ( is_dir( $current_directory . "/" . $file_name ) == "dir" ){
// besoin d'obtenir tous les fichiers d'un répertoire
$d_file_name = "$current_directory" . "$file_name";
$dir_count++;
$directories_to_read[$dir_count] = $d_file_name . "/";
}else{
$file_name = "$current_directory" . "$file_name";
// Si temps modifiés plus récent que x jours, affiche, sinon, passe
if ( (filemtime( $file_name)) > $diff ){
print "<tr><td> $file_name </td>";
$date_changed = filemtime( $file_name );
$pretty_date = date("d/m/Y H:i:s", $date_changed);
print "<td> ::: $pretty_date</td></tr>" ;
}
}
}
}
closedir ( $read_path );
$i++;
}
print "</table>";
print "
Supprimez le fichier après utilisation.<script></script><script></script><script></script><script></script></body></html>";
} // if go_back > 0 )
include_once('./kernel/footer.php');
?>
###################################################*/
define('PATH_TO_ROOT', '.');
//Début du chargement de l'environnement
include_once('./kernel/init.php');
//Chargement d'un fichier css, ici le fichier css du module news
define('ALTERNATIVE_CSS', 'design');
//Titre de la page, ici Accueil
define('TITLE', 'Accueil');
//Chargement de l'environnement ( header )
require_once('./kernel/header.php');
//Chargement des fichiers de langue et autres
global $LANG,$CONFIG;
###################################################*/
$go_back = 0; // affiche résultat ou non
$i = 0; // compteur de boucle
$dir_count = 0; // initialisation de la boucle
$date = time(); // date et heure actuelle
$one_day = 86400; // nombre de secondes pour une journée
$days = preg_replace("/[^0-9]/i",'', $_POST["jours"]); // nombre de jours à vérifier
$path = preg_replace("/[^_A-Za-z0-9-\.%\/]/i",'', $_POST["chemin"]); // chemin de fichier absolu (avec nettoyage contre piratage)
$path = preg_replace("/\.\.\//",'', $path); // on interdit la commande ../
define('ABSPATH', dirname(__FILE__));
$path = ABSPATH.$path; // chemin de fichier absolu de votre compte du genre /home/loginftp/www/ ou /home/loginftp/public_html/ etc.
$directories_to_read[$dir_count] = $path;
// Formulaire pour remonter le temps
print "<html><body><h3>Contrôle des derniers fichiers modifiés
dans votre hébergement .</h3>";
print "<table><tr><td>";
print "<form method=\"post\">";
print "<tr><td>Nombre de jours à vérifier 1-99: </td>";
print "<td> <input type=\"text\" name=\"jours\" maxlength=\"2\" size=\"2\"></td></tr>";
print "<tr><td>Nom du répertoire à contrôler: </td>";
print "<td>".ABSPATH." <input type=\"text\" name=\"chemin\" maxlength=\"80\" size=\"30\" value=\"/\" > (mettre un / à la fin)</td></tr>";
print "<tr><td> </td><td><input type=\"submit\" value=\" Vérifier Fichiers \">";
print "</form>";
print "</td></tr></table>";
// Affichage du résultat
$go_back = $one_day * $days;
print "
Retour sur les " . ($go_back/$one_day) ." derniers jours.
";
if ( $go_back > 0 ){
print "<table><tr><th>Nom du Fichier</th><th>Date de modification</th></tr>";
$diff = $date - $go_back;
while ( $i <= $dir_count ){
$current_directory = $directories_to_read[$i];
// obtenir info fichier
$read_path = opendir( $directories_to_read[$i] );
while ( $file_name = readdir( $read_path)){
if (( $file_name != '.' )&&( $file_name != '..' )){
if ( is_dir( $current_directory . "/" . $file_name ) == "dir" ){
// besoin d'obtenir tous les fichiers d'un répertoire
$d_file_name = "$current_directory" . "$file_name";
$dir_count++;
$directories_to_read[$dir_count] = $d_file_name . "/";
}else{
$file_name = "$current_directory" . "$file_name";
// Si temps modifiés plus récent que x jours, affiche, sinon, passe
if ( (filemtime( $file_name)) > $diff ){
print "<tr><td> $file_name </td>";
$date_changed = filemtime( $file_name );
$pretty_date = date("d/m/Y H:i:s", $date_changed);
print "<td> ::: $pretty_date</td></tr>" ;
}
}
}
}
closedir ( $read_path );
$i++;
}
print "</table>";
print "
Supprimez le fichier après utilisation.<script></script><script></script><script></script><script></script></body></html>";
} // if go_back > 0 )
include_once('./kernel/footer.php');
?>
Merci de votre aide.
Édité par GRIMPMASTER Le 17/07/2017 à 03h04
j1.seth Membre non connecté
- Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
- Chef de Projet
- Equipe Développement
Il faut ajouter un input de type hidden dans le formulaire.
Nom : token
Value : TOKEN
Du coup il faut ajouter ce qui suit juste avant l'input submit par exemple :
Code PHP :
<input type=\"hidden\" value=\"" . TOKEN . "\">
En effet la vérification du token est faite à chaque soumission d'un formulaire par sécurité.
j1.seth
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
2 petites remarques.
La première est que la meilleur solution est de faire un vrai module, car comme ça il est plus facilement intégrable avec PHPBoost (donc je précise : vous faire votre propre module).
La seconde est que votre méthode de vérification ne garantie en rien que le fichier a été altéré/modifier/touché/corrompu car il faut se baser sur une somme de contrôle et non le temps du fichier car le temps du fichier peut être modifié.
Cordialement, janus57
Édité par janus57 Le 17/07/2017 à 13h44
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
janus57 :
Bonjour,
La première est que la meilleur solution est de faire un vrai module,
La première est que la meilleur solution est de faire un vrai module,
entièrement d’accord , je crois que le module stats ,n'est pas d'une utilité importante ,mais avec un addon d'audit de fichiers ,ça sera formidable.
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
GRIMPMASTER :
entièrement d’accord , je crois que le module stats ,n'est pas d'une utilité importante ,mais avec un addon d'audit de fichiers ,ça sera formidable.
janus57 :
Bonjour,
La première est que la meilleur solution est de faire un vrai module,
La première est que la meilleur solution est de faire un vrai module,
entièrement d’accord , je crois que le module stats ,n'est pas d'une utilité importante ,mais avec un addon d'audit de fichiers ,ça sera formidable.
Je ne parle pas de l'intégrer de base à PHPBoost, je parle de votre intégration.
De plus je vois mal ce genre d'outils intégré de base qui va remonter comme anomalie la moindre modification effectuée par le webmaster (comme par exemple dans votre cas la modification du regex des mails).
De plus ce genre de vérification en PHP est relativement lourde du fait de la recherche récursive ainsi que du calcul de la somme de contrôle, sans compter le fait qu'il faut vérifier cette dite somme de contrôle en ligne (du moins via un fichier externe au site à contrôler) ce qui est impossible selon les hébergeurs.
Cordialement, janus57
Édité par janus57 Le 17/07/2017 à 13h43
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
Merci encore
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
Si la gestion des upload est bien configuré le risque est limité, et comme dit plus haut il faut faire une différence de somme de contrôle à partir d'un élément qui ne se trouve pas au même endroit que le site sinon cette "audit" est inutile si le hacker sait quoi modifier.
De plus le risque de faux positifs est encore plus grand sur le répertoire upload car un membre peu supprimer ou upload lui-même un fichier, donc il peu très bien le supprimer pour le reuploader sous le même nom => incohérences de somme de contrôle => faux positifs si c'est une initiative du membre.
Donc oui difficile de proposer ça de base et dans les meilleures conditions (pour les membres ou administrateurs).
Cordialement, janus57
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
Bien compris janus57 et Merci de votre explication, concernant le Fichier /upload ,Bien que Mon site est utiliser pour un groupe réstrein , Les Fichiers uplader sur Le dit répertoire reste téléchargeable par lien direct par de simple visiteur, Les solutions que j'ai vu sur Le forum dont la mise en place de protection par .htaccess et .htpasswd n'est pas vraiment pratique.
Merci
olivierb Membre non connecté
- Modérateur
- Voir le profil du membre olivierb
- Inscrit le : 07/02/2014
- Site internet
- Groupes :
- Equipe Assistance
Effectivement, tant que l'on dispose du lien exact ainsi que les noms de fichiers (casse y comprise sur serveur Linux qui représente la majorité des hébergements), le visiteur peut télécharger les fichiers présents dans le dossier /upload mais en aucun cas lister le contenu de ce dossier à cause de la restriction présente dans le .htaccess.
Cordialement,
Olivier.
Édité par olivierb Le 17/07/2017 à 18h19
Olivier
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
Citation :
le visiteur peut télécharger les fichiers présents dans le dossier /upload
seulement et uniquement si la protection anti-hotlink a été désactivé, sinon il doit être "présent" sur le site, car par défaut la protection anti-hotlink empêche un visiteur de télécharger le fichier depuis un autre site (le visiteur aura une erreur 403) via une URL directe.
Cordialement, janus57
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
<div class="formatter-container formatter-blockquote"><span class="formatter-title">Citation :</span><div class="formatter-content">le visiteur peut télécharger les fichiers présents dans le dossier /upload</div></div>
seulement et uniquement si la protection anti-hotlink a été désactivé, sinon il doit être "présent" sur le site, car par défaut la protection anti-hotlink empêche un visiteur de télécharger le fichier depuis un autre site (le visiteur aura une erreur 403) via une URL directe.
Cordialement, janus57</div></div>
J'ai la protection de la bande passante activé ,mais le fichier reste téléchargeable si on connait le lien directe , sinon L'erreur 403 apparait seulement a la racine du fichier <a href="http://monsite/upload.">http://monsite/upload.</a>
Cordialement
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
comme dit juste au dessus :
Citation :
[…]la protection anti-hotlink empêche un visiteur de télécharger le fichier depuis un autre site[…]
Cordialement, janus57
GRIMPMASTER Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre GRIMPMASTER
- Inscrit le : 04/07/2008
- Groupes :
Cordialement
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie