NewbieContest

Divers => Hacking => Discussion démarrée par: xXKirastarotHXx le 14 Février 2012 à 14:54:25



Titre: Sécurité d'un system de news collaborative
Posté par: xXKirastarotHXx le 14 Février 2012 à 14:54:25
Bonjour à tous :)

j'ai développé il y a déjà quelques temps un système de news avec backoffice.
étant seul admin, je n'ai pas pris le temps de beaucoup sécuriser l'insertion de nouvelle news; mais voila, j'aimerai faire évoluer
mon système pour que des utilisateurs puissent proposer des news/articles.

Évidement, comme le système de news accepte le html pour la mise en forme (CKEditor), il est un peu chiant de sécuriser le tout pour qu'il accepte le html, mais empêche le javascript.
j'ai quelques petites idées mais j'aurrai aimer avoir votre avis, vos conseils :)

1] interdir tout bonnement le html avec striptag, via un système à la BBcode, et un mysqlescape contre les injections
peut être un poil lourd a mètre en place, surtout qu'il va falloir que je convertisse les articles déjà existant...

2] passer un strip_tags($text, "<div><span><br><a><img>") puis l'escape mysql...
plus simple à mettre en place, mais j'ai un peu peur de ce qui pourrait arriver avec un <img onload='...'/> ou <a onclick='...'/>

Si vous avez d'autres idées, je prends :)

Bon, dans tout les cas il y aurra vérification de ma part du html avant la publication, et avec mon firefox+noscript je suis protégé contre les xss,
Mais par la suite je compte utiliser mon site comme CMS et donc distribuer l'appli et j'aimerai protéfé cette partie pour qu'un webmaster débutant et non connaisseur ai le minimum de verification à faire.

Merci bien : D


Titre: Re : Sécurité d'un system de news collaborative
Posté par: S0410N3 le 16 Février 2012 à 02:08:59
Je connais pas le machin sous quoi tu développes mais ça ressemble à la préhistoire quand même...


Titre: Re : Sécurité d'un system de news collaborative
Posté par: xXKirastarotHXx le 28 Février 2012 à 09:49:05
Heu... php ? xD

Désolé mais je te suis pas du tout là  :lol:
Tu pourrais développer ?


Titre: Re : Sécurité d'un system de news collaborative
Posté par: CommComm le 28 Février 2012 à 12:44:51
Et développer en php plutôt ?


Titre: Re : Sécurité d'un system de news collaborative
Posté par: xXKirastarotHXx le 29 Février 2012 à 11:59:09
Je crois qu'on s'est mal compris ^^'
C'est déjà développé en php.

Le truc, c'est que comme je suis le seul à avoir accès au backoffice, je n'ai pas pris la peine de sécuriser l'insertion de news dans Mysql.

Sauf que maintenant j'aimerais que n'importe quel utilisateur puisse proposer sa news.
Donc, pour faire simple, j'ai mis un editeur WYSIWYG (CKEditor en l'occurrence) à la dispo des utilisateurs.

A l'enregistrement de la news, si je passe un simple mysql_real_escape_string sur ma varible texte, je suis assujeti au XSS permanente (si l'utilisateur entre du javascript dans la source de CKEditor, ou qu'il bidouille le formulaire); Alors que si j'ajoute un strip_tags(), j'empèche alors la mise en forme du texte.

Comme solution, j'ai pensé rajouter un "strip_tags($text, "<div><span><br><a><img>");" sur mes variables, ce qui empêche déjà les balises "<script>", mais si l'utilisateur rajoute "onclick" sur un lien ou sur un image ça pose toujours problème.

Pour finir, j'ai trouvé une dernière solution, qui est de remplacer, avant enregistrement, toutes les balises autorisées en BBCode, et de faire l'inverse avant l'affichage de la news; mais je ne suis pas sur que ça soit très propre.

Voila pourquoi j'aurais besoin de vos avis/conseils =)


Titre: Re : Sécurité d'un system de news collaborative
Posté par: CommComm le 29 Février 2012 à 12:29:37
Euh... non, c'était juste un clin d'oeil parce que du demandais "Tu pourrais développer?" et j'ajoutais "développer ... en php". Bon d'accord, spa drôle  :(
Je me claque.


Titre: Re : Sécurité d'un system de news collaborative
Posté par: xXKirastarotHXx le 29 Février 2012 à 14:26:10
Je t'avoue que j'ai eu un doute  :lol:


Titre: Re : Sécurité d'un system de news collaborative
Posté par: Asteriksme le 29 Février 2012 à 15:50:31
Moi j'ai apprécié la boutade.


Titre: Re : Sécurité d'un system de news collaborative
Posté par: S0410N3 le 03 Mars 2012 à 21:23:56
Je serais tenté de dire que ce n'est pas pour rien que les bbcodes ont été inventés.

Sinon pour répondre à ta question (que je ne suis pas complètement sûr d'avoir compris) à part faire un filtre à l'extraction (ou mieux à l'insertion) de ta bdd sur toutes les méthodes javascript je ne vois pas trop quoi faire... Autant dire que ce n'est pas vraiment une solution, juste une rustine.

Si tu stockes du code HTML en base il ressortira toujours en HTML quoi que tu fasses ainsi que le javascript qui va avec.


Titre: Re : Sécurité d'un system de news collaborative
Posté par: xXKirastarotHXx le 09 Mars 2012 à 12:30:13
Ouais c'est bien ce que je pensais, mais ça m'oblige a modifier tout mes articles existant pour adapter le tout au bbcode,
C'est pour ça que je me demandais s'il y avait d'autre solution.
m'enfin tant pis... y'a plus qu'a ^^

Par contre, ou est-ce que je pourrais trouver une fonction bbcode correcte (encode et decode), je trouve pas grand chose de bien sur internet.
Je ne peux pas utiliser l'extension PECL BBCode de PHP car je suis sur un mutualisé chez 1and1 qui ne me permet pas d'activer cette extension.

j'ai bien trouver un petit bout de code que j'ai adapter:


Code:
function encode($string){
$search = array(
'#<b>(.*?)<\/b>#is',
'#<strong>(.*?)<\/strong>#is',
'#<i>(.*?)<\/i>#is',
'#<em>(.*?)<\/em>#is',
'#<u>(.*?)<\/u>#is',
'#<img src="(.*?)">#is',
'#<a href="(.*?)">(.*?)<\/a>#is',
'#<code>(.*?)<\/code>#is',
'#<pre class="brush:(.*?);">(.*?)<\/pre>#is',
'#<span style="font-size:(.*?);">(.*?)<\/span>#',
'#<span style="color:(.*?);">(.*?)<\/span>#'
);
$replace = array(
'[b]$1[/b]',
'[b]$1[/b]',
'[i]$1[/i]',
'[i]$1[/i]',
'[u]$1[/u]',
'[img]$1[/img]',
'[url=$1]$2[/url]',
'[code]$1[ /code]',
'[code=$1]$2[ /code]',
'[font size=$1]$2[/font]',
'[font color=$1]$2[/font]',
);

return preg_replace($search, $replace, $string);
}

function decode($string){
$search = array(
'#\[b\](.*?)\[\/b\]#is',
'#\[i\](.*?)\[\/i\]#is',
'#\[u\](.*?)\[\/u\]#is',
'#\[img\](.*?)\[\/img\]#is',
'#\[url\=(.*?)\](.*?)\[\/url\]#is',
'#\[code\](.*?)\[\/code\]#is',
'#\[code\=(.*?)\](.*?)\[\/code\]#is',
'#\[font size\=(.*?)\](.*?)\[\/font\]#is',
'#\[font color\=(.*?)\](.*?)\[\/font\]#is'
);
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<u>$1</u>',
'<img src="$1">',
'<a href="$1">$2</a>',
'<pre>$1</pre>',
'<pre class="brush:$1;">$2</code>',
'<span style="font-size:$1;">$2</span>',
'<span style="color:$1;">$2</span>'
);
return preg_replace($search, $replace, $string);
}


Mais là, il y a un problème: par exemple si on poste [ url=google.fr" onclick="alert(0)]osef[/url]
le Alert est intérprété :/

Tien! d'ailleurs je viens de voir par erreur que sur ce forum, le onclick="alert(0)" s'affiche dans la source mais n'est pas interprété, Il y a une surcouche javascript qui empêche les events ?
serrait-ce la solution ?


Une idée ? :)

En attendant je continue de regarder ce qu'il existe; sûrement la fonction des PHPbb devrais aller, si elle peux s'adapter.[/code][/code]