logo Homepage
+  NewbieContest
|-+  Divers» Hacking» Sécurité d'un system de news collaborative
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Sécurité d'un system de news collaborative  (Lu 2398 fois)
xXKirastarotHXx
Profil challenge

Classement : 898/49804

Néophyte
*
Hors ligne Hors ligne
Messages: 12


Voir le profil
« 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
Journalisée
S0410N3
Administrateur

Profil challenge

Classement : 5/49804

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1259


Voir le profil WWW
« #1 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...
Journalisée

Enjoy (copyleft de quelqu'un qui a trop parlé)

S0410N3

-------------------------------------------------------------------------------------
La folie est le prix à payer pour le temps passé à être trop lucide.
-------------------------------------------------------------------------------------
http://forum.hardware.fr/hfr/Discussions/Societe/francais-repere-repaire-sujet_19265_1.htm
xXKirastarotHXx
Profil challenge

Classement : 898/49804

Néophyte
*
Hors ligne Hors ligne
Messages: 12


Voir le profil
« #2 le: 28 Février 2012 à 09:49:05 »

Heu... php ? xD

Désolé mais je te suis pas du tout là 
Tu pourrais développer ?
Journalisée
CommComm

Profil challenge

Classement : 70/49804

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1283


Voir le profil
« #3 le: 28 Février 2012 à 12:44:51 »

Et développer en php plutôt ?
Journalisée

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(Devise d'un newbie shadok)
xXKirastarotHXx
Profil challenge

Classement : 898/49804

Néophyte
*
Hors ligne Hors ligne
Messages: 12


Voir le profil
« #4 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
Journalisée
CommComm

Profil challenge

Classement : 70/49804

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1283


Voir le profil
« #5 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.
Journalisée

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(Devise d'un newbie shadok)
xXKirastarotHXx
Profil challenge

Classement : 898/49804

Néophyte
*
Hors ligne Hors ligne
Messages: 12


Voir le profil
« #6 le: 29 Février 2012 à 14:26:10 »

Je t'avoue que j'ai eu un doute 
Journalisée
Asteriksme
Modérateur Global

Profil challenge

Classement : 27/49804

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 784

.


Voir le profil WWW
« #7 le: 29 Février 2012 à 15:50:31 »

Moi j'ai apprécié la boutade.
Journalisée

"It's a funny thing about some mathematicians. We often don't care if the results have applications because the results are themselves so pretty."
S0410N3
Administrateur

Profil challenge

Classement : 5/49804

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1259


Voir le profil WWW
« #8 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.
Journalisée

Enjoy (copyleft de quelqu'un qui a trop parlé)

S0410N3

-------------------------------------------------------------------------------------
La folie est le prix à payer pour le temps passé à être trop lucide.
-------------------------------------------------------------------------------------
http://forum.hardware.fr/hfr/Discussions/Societe/francais-repere-repaire-sujet_19265_1.htm
xXKirastarotHXx
Profil challenge

Classement : 898/49804

Néophyte
*
Hors ligne Hors ligne
Messages: 12


Voir le profil
« #9 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]
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: