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


athoms
WRInaute discret
WRInaute discret
 
Messages: 244
Inscription: 22 Avr 2004

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

Message le Sam Déc 08, 2007 2:52

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: Tout sélectionner
$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: Tout sélectionner
$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: Tout sélectionner
$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: Tout sélectionner
$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.

darmond.j
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 347
Inscription: 18 Fév 2007

Message le Sam Déc 08, 2007 3:22

merci :)

Victor BRITO
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 423
Inscription: 21 Déc 2006

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

Message le Sam Déc 08, 2007 4:13

athoms a écrit: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


laupie
WRInaute discret
WRInaute discret
 
Messages: 218
Inscription: 13 Mai 2007

Message le Sam Déc 08, 2007 6:32

Reco! :) et merci!


athoms
WRInaute discret
WRInaute discret
 
Messages: 244
Inscription: 22 Avr 2004

Message le Sam Déc 08, 2007 11:13

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: Tout sélectionner
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: Tout sélectionner
est_vide($texte,"Veuillez entrer votre commentaire!");

la ligne
Code: Tout sélectionner
pas_http($texte,"Pas d'adresse de sites accept&eacute;e dans le message!");


Voila :)


mrPringle
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 11 Mar 2006

Message le Sam Déc 08, 2007 12:42

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.

j-mi
WRInaute accro
WRInaute accro
 
Messages: 3411
Inscription: 17 Mai 2005

Message le Sam Déc 08, 2007 14:05

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 :)


keroin
WRInaute passionné
WRInaute passionné
 
Messages: 2308
Inscription: 29 Avr 2006

Message le Sam Déc 08, 2007 19:03

Excellent, j'étais justement en train de rechercher ce type de script pour les commentaires :D
Merci beaucoup ;)


titiplanti
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 440
Inscription: 4 Nov 2004

Message le Dim Déc 09, 2007 3:24

Merci.

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


athoms
WRInaute discret
WRInaute discret
 
Messages: 244
Inscription: 22 Avr 2004

Message le Mer Déc 12, 2007 15:46

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.


alliax
WRInaute impliqué
WRInaute impliqué
 
Messages: 561
Inscription: 29 Aoû 2005

Message le Mer Déc 12, 2007 16:21

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


athoms
WRInaute discret
WRInaute discret
 
Messages: 244
Inscription: 22 Avr 2004

Message le Mar Déc 18, 2007 17:26

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.

freete
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 23
Inscription: 23 Mai 2006

Message le Sam Jan 26, 2008 21:07

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


NoGlob
WRInaute discret
WRInaute discret
 
Messages: 177
Inscription: 17 Sep 2007

Message le Sam Fév 02, 2008 18:05

Bonjour,

la fonction stripslashes() retire les \


athoms
WRInaute discret
WRInaute discret
 
Messages: 244
Inscription: 22 Avr 2004

Message le Ven Fév 29, 2008 12:05

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.

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

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités