Categorizator : Attention Sécurité (injection + html)

WRInaute discret
Bonsoir,

Je viens de me rendre compte que dans la version standard de categorizator, il était possible lors de la soumission de sites, de placer dans les champs du code html et qu'il était vulnérable à une attaque de type injection. Sic. 8O

Je viens donc de modifier le script, et vous livre la solution que j'ai adoptée afin de pouvoir vous protéger. Libre à vous de l'adapter, où de la modifier et vu le nombre de version de categorizators, yourphpannuaire, il y a de grande chance que vous devrez la modifier.

Le problème avec ce superbe script, et qu'il est possible de placer du code html (du moins dans la version que je possède),et que dans l'interface d'admin on ne le voit pas...

Voici donc ce que j'ai fait pour éviter cela.

Pour éviter cela :

Dans le fichier submit_site.php

Remplacer
Code:
$nom_proprio = isset($_POST['nom_proprio']) ? $_POST['nom_proprio'] : '';
	$email_proprio = isset($_POST['email_proprio']) ? $_POST['email_proprio'] : '';
	$titre = isset($_POST['titre']) ? $_POST['titre'] : '';
	$url = isset($_POST['url']) ? $_POST['url'] : '';
	$url_image = isset($_POST['url_image']) ? $_POST['url_image'] : '';
	$url_image = $url_image=='http://' ? '' : $url_image;
	$description = isset($_POST['description']) ? $_POST['description'] : '';
	$add2newsletter = isset($_POST['add2newsletter']) ? (int)$_POST['add2newsletter'] : 0;
	$code = isset($_POST['code']) ? $_POST['code'] : '';*/

Par

Code:
$nom_proprio = isset($_POST['nom_proprio']) ?  strip_tags ($_POST['nom_proprio']) : '';
	$email_proprio = isset($_POST['email_proprio']) ?  strip_tags ( $_POST['email_proprio']) : '';
	$titre = isset($_POST['titre']) ?  strip_tags ($_POST['titre']) : '';
	$url = isset($_POST['url']) ?  strip_tags ($_POST['url']) : '';
	$url_image = isset($_POST['url_image']) ?  strip_tags ($_POST['url_image']) : '';
	$url_image = $url_image=='http://' ? '' : $url_image;
	$description = isset($_POST['description']) ?  strip_tags ($_POST['description']) : '';
	$add2newsletter = isset($_POST['add2newsletter']) ? (int)$_POST['add2newsletter'] : 0;
	$code = isset($_POST['code']) ? $_POST['code'] : '';
Cela aura pour effet de virer les codes html et javascript.

Pour eviter les injections sql :trouver la requête d'insertion (dans le cas d'une validation manuelle. Faire de même pour la requette de validation automatique le cas échéant) :

Code:
$sql = "INSERT INTO $T_sites_in_wait (id_cat,titre,description,url,url_image,nom_proprio,email_proprio,date_soumission) VALUES ('$id_cat','$titre','$description','$url','$url_image','$nom_proprio','$email_proprio',CURRENT_DATE) ";

la Remplacer par :

Code:
$sql = sprintf("INSERT INTO $T_sites_in_wait (id_cat,titre,description,url,url_image,nom_proprio,email_proprio,date_soumission) VALUES ('%s', '%s', '%s','%s','%s','%s','%s',CURRENT_DATE)",
               mysql_real_escape_string($id_cat,$lk),
               mysql_real_escape_string($titre,$lk),
               mysql_real_escape_string($description,$lk),
               mysql_real_escape_string($url,$lk),
               mysql_real_escape_string($url_image,$lk),
               mysql_real_escape_string($nom_proprio,$lk),
               mysql_real_escape_string($email_proprio,$lk));

Cela devrait empecher toute forme d'attaque par injection. J'ai testé, et chez moi ça fonctionne.

Bon week end à tous.
 
WRInaute occasionnel
athoms a dit:
Je viens de me rendre compte que dans la version standard de categorizator, il était possible lors de la soumission de sites, de placer dans les champs du code html
Y compris des balises script enfermant du JavaScript susceptible d'être maléfique ? 8O
 
WRInaute discret
Bonjour,

J espère que cette modif vous sera utile,

Y compris des balises script enfermant du JavaScript susceptible d'être maléfique ?
Oui... J'ai juste pour l'instant eu droit pour ma part à des petits malins qui mettaient de la pub ou des caractères gras, des couleurs... Il y a même un webmaster qui a placé une popub avec un effet retardateur :evil:

Sinon concernant la sécurité de ce script, Je vous conseille de renommer la répertoire admin, et de le protéger par password avec un htpasswd.

Les commentaires doivent être aussi protégés de la même manière que celle décrite plus haut.

De plus j'ai fait une petite fonction pour interdire de placer une url dans les commentaires. cela permet d'éviter que les commentaires ne soient là que pour faire de la pub (libre à vous de l'utiliser ou non).

Voici la fonction à intégrer par exemple dans functions.php:
Code:
function pas_http($champ,$message,$inc = false)

{
	$message .= "<br><br>";
	$message .= "<a href=\"javascript:history.go(-1);\">Retour au formulaire</a>";
	$champ = trim($champ);
	if (ereg("http",$champ))
	{
		echo "<CENTER>$message</CENTER>";
		if ($inc) //si il faut inclure le fichier de fin (-> submit_site)
			include("after.php"); 
		exit;
	}
	else
		return false; }

Puis placer après la ligne
Code:
est_vide($texte,"Veuillez entrer votre commentaire!");
la ligne
Code:
pas_http($texte,"Pas d'adresse de sites accept&eacute;e dans le message!");

Voila :)
 
WRInaute occasionnel
Merci, non pas pour categorizor en ce qui me concerne, mais je ne connaissais pas la fonction mysql_real_escape_string(), qui a l'air plutôt utile, ça évite de faire pareil à la main.
 
WRInaute passionné
merci athoms
ta modif est bien plus simple que la mienne , moi je connaissait depuis 2 ans cette faille ^^ et la laisse meme ouverte car certains on plus facile a poster leurs sites en mode vrac :)
 
WRInaute passionné
Excellent, j'étais justement en train de rechercher ce type de script pour les commentaires :D
Merci beaucoup ;)
 
WRInaute discret
de rien :)

J'ai oublié de dire une chose, lors de l'affichage il faudra enlever les "\" dans le titre et la description, sinon ça ne fera pas très propre.

(Il y a intérêt à vite faire la modif maintenant que tu as dévoilé la faille ^^)

Pas si évident en ce qui concerne l'injection de code mysql, ce n'est pas à la portée de tous et ça nécessite quand même de bien connaitre la structure des tables mysql utilisées sur ce script. Mais mieux vaut tout de même éviter les risques.
 
WRInaute occasionnel
Salut, c'est cool d'apporter de la sécurité.
Mais est-ce que cela pourrait être ajouté au script lui même?
On m'a donné une page mais la dernière version semble dater d'aout 2005, est-ce possible que personne n'ai repris le script depuis pour y apporter quelques améliorations?

Si oui sur quel page peut on le télécharger?

Merci
 
WRInaute discret
bonjour,

En fait il me semble que depuis il n'y ait plus de version officielle de ce script open source. Beaucoup de webmasters, l'ont intégré sur leur site, certains en se contentant de l'installer, d'autres en l'adaptant. Il me semblent que certains ont repris le travail et ont sorti des versions modifiées sous d'autres noms.

Effectivement, ça pourrait être sympa d'avoir un package de categorizator corrigé avec de nouvelles améliorations mais ça demanderait pas mal de travail, sachant que la plupart des utilisateurs l'ont customizé pour qu'il réponde à leur besoin et s'intègre à leur site.
 
Nouveau WRInaute
Salut Athoms

Merci mais tu dit :

" J'ai oublié de dire une chose, lors de l'affichage il faudra enlever les "\" dans le titre et la description, sinon ça ne fera pas très propre. "

est ce que tu pourrai précise la procédure pour enlever les "\"

Merci
 
WRInaute discret
Bonjour,

Désolé cela fait quelque temlps que je ne suis pas venu sur Webrank.
Je ne pas fournir une version de categorizator, car je n'utlise plus que quelques gragments du code original..

Merci Noglob de ta réponse, il y a aussi strreplace qui peux faire l''affaire.

Bonne journée à tous.
 
WRInaute occasionnel
J'ai depuis, vu qu'un script d'annuaire populaire s'appelle FREEGLOBES, par rapport à categorizator, vous en pensez quoi?
Apparement il doit etre plus recent/mieux car j'en ai vu plusieurs qui commence de nouveaux annuaires avec freeglobes, je pense qu'ils doivent aussi connaitre categorizator et qu'ils ont fait le choix de freeglobes apres avoir reflechi
 
WRInaute discret
Salut,

En ce qui concerne freeglobes, je le connaisun tout petit peu en tant qu'internaute (non testé sur un de mes sites), et effectivement il a l'air pas mal. Categorizator est excellent mais commence à dater. D'ailleurs beaucoup de webmasters, l'ont d'ailleurs re-écris partiellement ou complétement afin qu'il soit plus moderne ou plus efficace.

Pour une personne possédant un annuaire avec une base de plus de 1000 sites, migrer sur freeglobe doit être faisable, mais pas si simple.

Dans le cas d'un nouvel annuaire, ça pourrait je pense être un bon choix technique. Idem pour ceux qui n'y connaissent rien en php.

Il y a aussi des hacks ou dérivés de categorizator, je ne me souviens plus de leur nom, qui ont l'air pas mal car ils integrent par défaut des modification apportées à categorizator.
 
WRInaute occasionnel
un script qui est parti de categorizator aussi c'est CIGIEMA (drole de nom) adresse :
http://forum.cigiema.fr/t1754-Script-V4R01.html pour la version 4R01

je ne sais pas si c'est bien ou pas, j'imagine que c'est pas mal, puisque tenu a jour mais comparé a freeglobes je ne sais pas.

Je n'ai essayé ni freeglobes ni cigiema, mais j'avais bien aimé categorizator bien que j'avais du faire beaucoup de modifs et surtout faire une page par site, page fiche car ca n'existait pas d'origine.
 
Discussions similaires
Haut