IdleBox shootbox : une shoutbox totalement en ajax! Par JarodxXx
le jeudi 5 juin 2008, 11:28Il fallait que ça arrive un jour ... À une certaine époque ont vu fleurir des scripts en tous genres qui ont (à l'époque) remué le web : IdleBox a mis à jour ce célèbre script avec une version total ajaxisée !
IdleBox Shootbox est un mini-livre d'or rapide et ergonomique, facile à installer et à utiliser !
IdleBox shootbox est une shoutbox (mini-livre d'or) conçue entièrement en Ajax/javascript côté interface utilisateur et PHP/Mysql côté serveur.
Ce script entièrement gratuit et
paramétrable utilise les dernières technologies du web 2.0
et permet à vos visiteurs une utilisation
claire et simple sans recharger une seule fois la page !
Cette shootbox a été réalisée à l'aide de la librairie
javascript/AJAX Jquery.
Idlebox Shootbox est un script
de IdleMan placé sous la licence Creative Common.
Pour télécharger cette shoutbox AJAX/PHP, faites un tour sur le
site officiel du script : http://www.idlewave.com














Ziki
Dailymotion
Flickr
Technorati
Twitter
1. Le jeudi 5 juin 2008, 12:06 par Guillaume
Excellent, moi j'avais repéré Shoutmix qui fait la même chose sauf que ce n'est pas un script à télécharger et administrer ...
Voilà mon billet : http://www.bizetfamily.net/post/200...
2. Le jeudi 5 juin 2008, 13:34 par IdleMan
Hey calée cette shoutbox :p !!
Merci bien pour ce petit coup de pouce jarod ^^
3. Le jeudi 5 juin 2008, 16:49 par meatshake
Ultra calée cette shoutbox, bravo Idleman!
Et Jarodxxx ton nouveau thème de blog est tout crado sous ubuntu, je préférai l'ancien
4. Le jeudi 5 juin 2008, 20:12 par Emacs
Wahou c'est beau, c'est claquant, ça jette plein de poudre au yeux !!!! Mais qu'est-ce que c'est codé comme un pied et pas du tout sécurisé... Injections SQL à la pelle... Il y'en a qui vont se faire hacker leur site. D'ailleurs ce genre de script ne fonctionne pas sur mes serveurs web rien que pour les tags <? au lieu de <?php
Bref, si vous souhaitez installer une shootbox qu'elle est belle, allez y ! Utilisez ce beau script mais ne vous plaignez pas si votre base de données se fait vider ensuite à votre insu.
5. Le vendredi 6 juin 2008, 08:35 par IdleMan
Emacs, le script est en constante évolution et je suis a l'écoute de toutes nouvelles suggestions, si tu est en mesure de m'envoyer les failles éventuelles que tu aurait détectées par email je suis tout ouie, jusqu'ici je n'ai subi aucune attaque et n'ai eu aucune remarque au niveau securitée , c'est pourquoi ta remarque me laisse perplexe
6. Le vendredi 6 juin 2008, 10:01 par Emacs
@IdleMan : j'ai téléchargé l'application puis j'ai ouvert deux ou trois fichiers pour juger de la qualité du code. Et c'est là que je me suis aperçu de l'horreur du code. Je te montre juste un seul fichier pris au hasard parmi les autres. En 9 lignes de code (comprenant les deux tags php), on repère pas moins de 5 erreurs de programmation. Voici le code pour te le remémorer :
<?
$id=$_POST['id'];
include ("config.php");
mysql_connect($host, $login, $mdp);
mysql_select_db ($bdd);
$requete="DELETE FROM ".$prefix."taverne WHERE id='$id'";
$ReadAllQuery = mysql_query ($requete) or die('Erreur SQL ('.$requete.'):<br />'.mysql_error().'<br /><br />');
mysql_close();
?>
Passons à présent aux remarques :
1/ Les tags PHP sont <?php et non <? qui peuvent être désactivés sur des serveurs ayant des configs dignes de ce nom (voire directive short_open_tags dans le php.ini). Je te renvoie également sur cet article pour que tu comprennes en quoi c'est "mal" d'utiliser <? plutôt que <?php.
http://www.apprendre-php.com/tutori...
2/ Peux-tu m'expliquer à quoi sert la duplication de variable inutile $id = $_POST['id'] ? Surtout qu'après tu ne fais aucun test sur la variable $id. Je peux faire passer tout ce que je veux dans cette variable pour pirater ta requête SQL et détourner son fonctionnement normal. Dropper une table entière par exemple.
3/ Tu ne testes absolument pas ta connexion SQL. Que se passe-t-il si la connexion au serveur échoue ? Que l'on n'arrive pas à sélectionner la base de données ? Il n'y a aucune raison à vouloir continuer le code.
4/ Pourquoi utiliser des variables pour les identifiants de connexion quand les constantes sont faites pour ça ?
5/ La fameuse requête SQL. IL y'a pas mal de choses à dire dessus. Tout d'abord préfère les simple quotes (apostrophes) pour déclarer ta requête. Ensuite, on ne met pas d'apostrophes autour d'une valeur de type entière (Integer). Les apostrophes sont réservés aux dates et chaînes de caractères. Enfin tu injectes ta variable $id sans l'avoir sécurisée auparavant. Bonjour l'injection SQL qui permettra à n'importe quel pirate de démolir ta base de données.
6/ Le or die() ne doit être utilisé que dans un environnement de développement et non en production finale. Pourquoi ? Tout d'abord pour ne pas afficher les messages d'erreurs obscurs au visiteur. De plus niveau séurité, ton or die() c'est n'importe quoi. En cas d'échec, le pirate récupères la requête et le message d'erreur MySQL. Il découvre ainsi comment est structurée ta base de données pour mieux préparer une nouvelle attaque par injection SQL.
Voilà tout ce qu'il y'a à dire sur ces 10 lignes de code. Passons à la correction :
1/ Le fichier de configuration :
<?php
// Contantes dans le fichier de configuration
define('DB_HOST','localhost');
define('DB_PWD','root');
define('DB_LOGIN','root');
define('DB_NAME','ma_base');
define('DB_PREFIX','shootbox_');
// Fonction de connexion à MySQL
function DB_Connect() {
$con = mysql_query(DB_HOST, DB_LOGIN, DB_PWD);
if(!$con) {
exit('Connexion au serveur SQL impossible !');
}
if(!mysql_select_db(DB_NAME, $con)){
exit('Sélection de la BDD impossible');
}
return $con;
}
?>
2/ Le fichier delete.php
7. Le vendredi 6 juin 2008, 10:04 par Emacs
<?php
require(dirname(__FILE__).'/config.php');
if(!empty($_POST['id'])
&& ctype_digit($_POST['id'])) {
// Connexion à MySQL
$con = DB_Connect();
$requete = 'DELETE FROM '. DB_PREFIX .'taverne WHERE id='. $_POST['id'] .' LIMIT 1';
if(false === mysql_query($requete, $con)) {
exit('La requête SQL a échoué !');
}
mysql_close();
} else {
exit('Noob hacker !');
}
?>
C'est loin d'être la solution la plus élégante pour faire ça mais elle a le mérite d'être sécurisé et de contrôler que tout se passe bien à chaque moment.
Je m'étonne qu'il n'y ai pas d'administration. Tout le monde peut venir supprimer des messages de la shootbox en devinant le chemin du script delete.php sur le serveur...
Bref tu as beaucoup de trucs à revoir....
++
8. Le vendredi 6 juin 2008, 10:09 par Emacs
Juste pour infos, je te pirate ta shootbox comme je veux. Je sais où se trouve ton script delete.php sur ton serveur web. On le devine très vite en analysant le code source HTML ou les entêtes HTTP avec firebug.
Bref sécurise tout ça au plus vite avant que quelqu'un vienne s'amuser avec ton code
Je te rassure je ne le ferai pas mais c'est juste pour te sensibiliser à tout ça.
++
9. Le vendredi 6 juin 2008, 10:20 par jarodxxx
@Emacs > je ne lasse jamais de tes commentaires .. juste pour la gloire , je n'ai rien appris que je ne savais deja .. et ca fait plaisir de savoir que je suis plutot a jour dans ma facon de coder :p
@idleMan > On attend une V3 bien secure dans les jours qui arrivent ok ?!
10. Le vendredi 6 juin 2008, 11:05 par IdleMan
Un grand merci emacs pour tes commentaires (meme si j'aurais préféré que tu les envois par email plutot que de les exposer publiquement risquant ainsi la securité des utilisateurs ayant téléchargé les anciennes versions) , les mises a jours sont déjà en cours de préparations, une nouvelle version comportant les <?php et renforcant la securité des pages delete.php et update.php est deja en ligne .
Ca c'est ce que j'appelle un message constructif ^^ .
toutes ces modifs seront apportées avant demain matin , merci encore Emacs.
11. Le vendredi 6 juin 2008, 20:57 par Palleas
> meme si j'aurais préféré que tu les envois par email plutot que de les exposer publiquement risquant ainsi la securité des utilisateurs ayant téléchargé les anciennes versions
Moi j'ai une meilleure solution : ne pas publier une application codée avec les pieds, pas con nan ?
12. Le vendredi 6 juin 2008, 21:03 par Rykian
Ya pas que l'appli qui a été codé avec les pieds, cf le "Votre commentaire a été publié." sous les commentaires sans avoir même commenté avant. (sous Safari en tout cas)
13. Le samedi 7 juin 2008, 18:52 par the must
Te script is great, is verry useful but there is a few things that must be secure
14. Le lundi 9 juin 2008, 15:03 par Idleman
Une nouvelle version un peu plus sécurisée est sortie , bien entendu il peu rester des failles mais j'y travaille.
15. Le mardi 10 juin 2008, 15:17 par Bircher
C'est la meilleur shoutbox que j'ai vue ( à l'exception d'une ).
16. Le mardi 10 juin 2008, 17:25 par Shunny
Pour une fois que je vois un design pas mal. Que je vais retapé quand même, une fois que le script sera secure.
Grand bravo pour ce script IdleMan !
Et merci à Emacs d'avoir revue ce script (j'en connais pas bcp qui aurait passé un peu de temps à aider un inconnu). C'est pourquoi je prendrais ce script que quand IdleMan aura bien tout sécurisé : ) (l'erreur est humaine après tout...)
17. Le jeudi 12 juin 2008, 21:32 par Bobib
une shoutbox en ajax aurai trouvé son intéret avec un XML et pas mysql...
php5 et simpleXML permettent de faire une classe pour ca tres simplement.
18. Le vendredi 27 juin 2008, 01:14 par Peperuka
Ouéh, cela a l'air de puer grave ce truc... Des erreurs basiques, bonjour les injections... A éviter, donc !!
19. Le mardi 1 juillet 2008, 16:56 par Shadows
l n'y a plus d'erreur d'injection depuis un certain temps , qu'on aime pas cette shoutbox , je suis d'accord , qu'on repete betement les commentaires du dessus pour avoir l'air intelligent , je trouve ça totalement hors de propos .
20. Le mardi 1 juillet 2008, 17:21 par jarodxxx
+ 1 pour Shadows !!
Au chiottes les troll
21. Le mardi 15 juillet 2008, 08:40 par Peperuka
Alors comme cela, on se permet de traiter ces lecteurs et l'on filtre les commentaires...
Shadows a peut-être raison mais ton dernier com est totalement hors de propos.
Enfin, je n'ai pas de temms à perdre ici. Je te demande juste, en conformité avec la loi relative à l’informatique et aux libertés, d'effacer les données privées communiquées dans le commentaire #19 et le publier sous anonymat (ou de l'effacer) ainsi que celui-ci.
Merci - Rappel dans deux jours si pas fait.
Your beloved troll
22. Le mardi 15 juillet 2008, 10:39 par jarodxxx
tout d'abord, le comentare #19 ne te regarde pas et tu n'a donc aucune autorité la dessus ...
D'autre part conformément a la loi, aucune données personnelle n'est divulguée ni exploitée, seules les information volontairement saisie par un tiers (sans obligations) sont affichés, je ne comprend donc pas ce commentaire toujours plus inutile.