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
Par
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) :
la Remplacer par :
Cela devrait empecher toute forme d'attaque par injection. J'ai testé, et chez moi ça fonctionne.
Bon week end à tous.
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'] : '';
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.