FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 29-03-2012 12:01:55

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Core de FluxBB : téléchargement des avatars dans profile.php.

Bonjour.

Je suis actuellement en train de travailler sur une mod et j'avais une question.
Dans profile.php, à la section "avatars", il y a ce paramètre passé en hidden via le formulaire de téléchargement :

<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $pun_config['o_avatars_size'] ?>" />

Ensuite il y a une vérification de la taille du fichier :

// Make sure the file isn't too big
if ($uploaded_file['size'] > $pun_config['o_avatars_size'])
				message($lang_profile['Too large'].' '.forum_number_format($pun_config['o_avatars_size']).' '.$lang_profile['bytes'].'.');

N'y a-t-il pas la une redondance de sécurité ? Peut-on, sans craindre pour la sécurité, supprimer la vérification ?

Hors ligne

#2 29-03-2012 18:44:11

PascL
Membre
Inscription : 06-09-2007
Messages : 554
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Euh c'est pas le seul endroit où tu trouveras une redondance.

En PHP, tu dois mettre des sécurités sur les formulaires (pour que l'utilisateur ne mette pas n'importe quoi), et tu dois mettre des sécurités sur le traitement de ces formulaires (pour vérifier que les données sont valides et/ou conformes à ce que tu attends).

Parce que quelqu'un de mal intentionné pourra toujours contourner la sécurité du formulaire: le formulaire est visible côté client et éditable sans trop d'efforts (c'est seulement du html).

Exemple simple:
Je copie la page d'upload d'avatar sur mon disque dur, je modifie quelques données dedans et je renvoie vers la page de ton site... Si tu supprimes la vérification lors du traitement, je peux mettre ce que je veux comme taille de fichier...

Hors ligne

#3 29-03-2012 18:49:16

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Autre question sur le fonctionnement de profile.php, il y a quelque chose que j'ai du mal à comprendre.
En effet, après de multiples tests, en local avec wampserver :
si j'essaie d'envoyer une image dont la taille dépasse $pun_config['o_avatars_size'] (déclaré dans Administration/options), le message d'erreur renvoyé est :

Fichier trop volumineux. Le serveur refuse son envoi.

Ce message d'erreur correspond à $lang_profile['Too large ini'] qu'on trouve ici (et seulement ici) :

// Make sure the upload went smooth
			if (isset($uploaded_file['error']))
			{
				switch ($uploaded_file['error'])
				{
					case 1: // UPLOAD_ERR_INI_SIZE
					case 2: // UPLOAD_ERR_FORM_SIZE
						message($lang_profile['Too large ini']);
						break;

Cela voudrait donc dire c'est une erreur renvoyée directement par PHP et que mon fichier dépasserait upload_max_filesize défini dans php.ini. Or ce n'est pas le cas ! (upload_max_filesize est réglé à 4Mo chez moi).
Normalement je devrais avoir ce message d'erreur là :

La taille du fichier dépasse le maximum autorisé 10 240 octets.

Qui correspond à cette partie :

// Make sure the file isn't too big
if ($uploaded_file['size'] > $pun_config['o_avatars_size'])
	message($lang_profile['Too large'].' '.forum_number_format($pun_config['o_avatars_size']).' '.$lang_profile['bytes'].'.');

D'ailleurs, si je change la valeur de upload_max_filesize, c'est toujours le premier message d'erreur qui apparaît si la taille de mon fichier est supérieur à cette valeur.

Conclusion, y a quelque chose qui cloche ou que je n'arrive pas à saisir...

Hors ligne

#4 29-03-2012 19:16:37

adaur
Membre
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Salut Wan,

C'est normal! (voir doc)

UPLOAD_ERR_FORM_SIZE

    Valeur : 2. Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.

C'est à cela que sert le input hidden cité plus haut. C'est une protection supplémentaire en quelque sorte.


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#5 29-03-2012 22:30:13

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

adaur a écrit :

Salut Wan,

C'est normal! (voir doc)

UPLOAD_ERR_FORM_SIZE

    Valeur : 2. Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.

C'est à cela que sert le input hidden cité plus haut. C'est une protection supplémentaire en quelque sorte.

Merci Adaur ! Je viens de m'apercevoir de ce fait.
Du coup on a peu de chance de rencontrer l'erreur :

La taille du fichier dépasse le maximum autorisé 10 240 octets.

C'est dommage, car cela renseigne plus l'utilisateur que :

Fichier trop volumineux. Le serveur refuse son envoi.

Car en fait le serveur ne refuse rien du tout, c'est vraiment profile.php qui le refuse (d'où ma confusion)....

Hors ligne

#6 29-03-2012 22:36:29

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

PascL a écrit :

Euh c'est pas le seul endroit où tu trouveras une redondance.

En PHP, tu dois mettre des sécurités sur les formulaires (pour que l'utilisateur ne mette pas n'importe quoi), et tu dois mettre des sécurités sur le traitement de ces formulaires (pour vérifier que les données sont valides et/ou conformes à ce que tu attends).

Parce que quelqu'un de mal intentionné pourra toujours contourner la sécurité du formulaire: le formulaire est visible côté client et éditable sans trop d'efforts (c'est seulement du html).

Exemple simple:
Je copie la page d'upload d'avatar sur mon disque dur, je modifie quelques données dedans et je renvoie vers la page de ton site... Si tu supprimes la vérification lors du traitement, je peux mettre ce que je veux comme taille de fichier...

Merci pour ces explications PascL ! C'est vrai que je n'ai pas (encore) l'esprit assez tordu pour devenir un bon hacker, donc je ne pense pas à tous les "trucs" imaginables.
Cependant, je prépare une mod qui se veut la plus sécurisée possible, donc ma question n'était pas innocente... wink

Hors ligne

#7 29-03-2012 22:37:42

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Une protection html (même js), ça s'appelle pas une protection tongue
Donc j'affirme : input totalement useless.

Pour modifier la taille max des avatars, ça se joue du coté de l'administration, dans les options.

Hors ligne

#8 29-03-2012 23:24:42

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

WinuX a écrit :

Pour modifier la taille max des avatars, ça se joue du coté de l'administration, dans les options.

Oui, ça je sais !

WinuX a écrit :

Une protection html (même js), ça s'appelle pas une protection tongue
Donc j'affirme : input totalement useless.

Je suis d'accord, je faisais simplement remarquer que l'information fournie était erronée en cas de dépassement de la taille max des avatars.

En fait, je cherche à simplifier le téléchargement d'avatars pour les utilisateurs, il faut donc beaucoup de protections... qui seront gérées par PHP bien sûr ! wink

Hors ligne

#9 30-03-2012 09:40:47

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Si tu veux simplifier pour les utilisateurs, ajoutes un remote upload (ou la mod "avatar par url" mais faudra corriger quelques pseudo failles).
C'est très pratique wink

Hors ligne

#10 30-03-2012 11:02:12

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

WinuX a écrit :

Si tu veux simplifier pour les utilisateurs, ajoutes un remote upload (ou la mod "avatar par url" mais faudra corriger quelques pseudo failles).
C'est très pratique wink

Je suis parti de la mod "Avatar par url" que j'avais déjà adaptée pour FluxBB 1.4 (voir ICI), mais il y a des grosses failles de sécurité que je suis en train de corriger. J'y rajoute un redimensionnement automatique. J'ai presque fini maintenant que j'ai eu vos réponses à mes interrogations.
Merci à vous ! wink

Hors ligne

#11 30-03-2012 16:09:50

adaur
Membre
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

@Wan: Je ne suis personnellement pas fan de l'avatar distant, je trouve que c'est potentiellement ouvrir son forum à des failles pour rien quand un avatar ne prend que quelques Ko à être stocké.

Par rapport au script que tu as posté sur le .org, le seul truc que je rajouterai est une vérification de l'URL pour vérifier qu'elle ne contient pas de "php" dans son titre. En effet, une image X.php.png peut être interprétée par le serveur comme un fichier PHP.


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#12 30-03-2012 22:13:16

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

adaur a écrit :

@Wan: Je ne suis personnellement pas fan de l'avatar distant, je trouve que c'est potentiellement ouvrir son forum à des failles pour rien quand un avatar ne prend que quelques Ko à être stocké.

Par rapport au script que tu as posté sur le .org, le seul truc que je rajouterai est une vérification de l'URL pour vérifier qu'elle ne contient pas de "php" dans son titre. En effet, une image X.php.png peut être interprétée par le serveur comme un fichier PHP.

J'essaye de pourvoir à ces failles...
Pour la taille du fichier lié à l'URL et pour éviter un éventuel "overflow", j'ai mis en place une lecture de celui-ci en streaming avec un arrêt au-delà d'une limite fixée par l'administrateur.
J'ajoute que dans le cas d'un URL envoyé, ce n'est pas vraiment un "avatar distant" dans le sens où, dans la mod que je suis en train de finaliser, le fichier image lié est réellement enregistré sur le serveur dans /img/avatar/. Il ne sera donc jamais affiché dans le viewtopic de façon distante.
Pour l'extension "déguisée", j'ai dealé avec ".gif", ".jpg", ".png" pensant que ".gif.php" par exemple était potentiellement dangereux. Je ne savais pas que ".php.gif", par exemple, était potentiellement dangereux aussi.
Est-ce le cas ?
Si ça l'est je ferai un preg_match supplémentaire...
Merci de vos conseils...

Dernière modification par Wan (30-03-2012 22:39:20)

Hors ligne

#13 31-03-2012 05:25:05

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Qu'on me corrige si j'me trompe, mais si tu fais un remote upload comme ça à l'air d'être le cas, alors inutile de te soucier de php. Il est exécuté coté serveur, donc tu ne télécharges aucuns scripts php, juste l'image.

Hors ligne

#14 31-03-2012 08:37:15

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

C'est un peu le cœur du problème et la raison de cette discussion...
Il "paraît" qu'un script peut être inclus dans un fichier image (avec le gif en particulier).
Effectivement, je ne pense pas qu'il ne se passe quoi que ce soit pendant l'upload : celui-ci est fait en streaming, par paquets d'octets, donc aucune exécution de script possible.
Ensuite je crée un objet image avec la chaîne composée des octets uploadés en utilisant imagecreatefromstring. Là déjà on peut avoir un doute sur une exécution possible ou non (ça me paraît peu probable).
Puis, l'objet image est transféré en tant que fichier dans /img/avatars. Là non plus, pas d'exécution possible.
Par contre, c'est lors de l'affichage de l'image dans viewtopic qu'il pourrait se passer quelque chose si un script est caché, non ?
Je veux bien avoir votre avis sur ce fait.

[Edit] Si on rajoute un redimensionnement de l'objet image, je ne vois pas comment un script "survivrait" à cette opération...

Dernière modification par Wan (31-03-2012 12:24:47)

Hors ligne

#15 31-03-2012 16:43:38

adaur
Membre
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Wan a écrit :

Est-ce le cas ?

Oui, sur certains serveurs des fichiers PHP .php.png (ou autre) peuvent être exécutés. Exemple: http://adaur.monespace.net/image.php.png

<?php
echo 'ceci est du code PHP';
?>

Même si d'autres vérifications sont faites, un petit preg_match ne ferait pas de mal happy.

Dernière modification par adaur (31-03-2012 16:47:39)


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#16 31-03-2012 17:25:01

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

adaur a écrit :
Wan a écrit :

Est-ce le cas ?

Oui, sur certains serveurs des fichiers PHP .php.png (ou autre) peuvent être exécutés. Exemple: http://adaur.monespace.net/image.php.png

<?php
echo 'ceci est du code PHP';
?>

Même si d'autres vérifications sont faites, un petit preg_match ne ferait pas de mal happy.

Belle démonstration ! plus_un
Je m'en occupe donc...

Hors ligne

#17 31-03-2012 18:26:20

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Bon après mure réflexion et beaucoup de tests j'ai décidé de n'autoriser le remote upload qui si la bibliothèque gd est activée (sinon, seul l'upload classique est activé).
Cela résout les problèmes de sécurité :

  • L'upload se fait par paquets pour pouvoir gérer la limite de taille maximale du fichier image d'origine.

  • Puisque l'upload donne une chaîne d'octets, et que je passe par un imagecreatefromstring, je n'ai pas besoin de m'occuper du type d'image téléchargée : en particulier, un fichier comme Adaur vient de montrer ne sera pas reconnu en tant qu'image et ne sera donc pas accepté.

  • Pour éviter quand même tout problème, et puisque la fonction redimensionnement est prévue, je ferai systématiquement passer l'image "à la moulinette" :

    - si l'image est trop grande à l'origine, la réduction détruira tout script éventuellement contenu dans la chaîne d'octets.

    - si l'image est d'origine de taille acceptable, je la "gonflerai" à 125 % puis la réduirai à 80% pour retrouver la taille d'origine : il y aura une très légère perte de qualité (pas grave pour un avatar) mais cette opération double détruira aussi tout script éventuellement contenu.

Le temps de m'occuper de l'install_mod et des fichier lang et la mod sera bientôt dispo. Merci pour vos conseils !

Hors ligne

#18 31-03-2012 18:33:36

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Le preg_match se contourne malheureusement hmm, un simple url_rewriting et le .php n'est plus happy

Il manque juste un header pour que ce soit considéré comme une image adaur:

header('Content-type: image/png');

Sans ça, impossible d'up l'image happy

Reste plus qu'à tester quand tu uploades l'image depuis l'url distance si le code est toujours interprété par php happy

Hors ligne

#19 31-03-2012 19:02:02

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Quand j'aurai finalisé la mod, je vous laisserai tester : malheureusement, je n'ai aucun fichier image contenant un script sous la main pour essayer... wink
Mais ça m'étonnerait qu'il passe à travers ma "moulinette"... happy

Hors ligne

#20 31-03-2012 19:36:41

adaur
Membre
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Wan a écrit :

- si l'image est d'origine de taille acceptable, je la "gonflerai" à 125 % puis la réduirai à 80% pour retrouver la taille d'origine : il y aura une très légère perte de qualité (pas grave pour un avatar) mais cette opération double détruira aussi tout script éventuellement contenu.

Ce n'est pas la peine de faire ceci: en plus de prendre du CPU pour rien, c'est inutile car un simple renommage complet de l'image (comme FluxBB le fait) rend déjà inoffensif un script.

Pour tester ta mod, cherche un shell c99 en PHP wink


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#21 31-03-2012 22:07:26

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

adaur a écrit :

Ce n'est pas la peine de faire ceci: en plus de prendre du CPU pour rien, c'est inutile car un simple renommage complet de l'image (comme FluxBB le fait) rend déjà inoffensif un script.

Bon, ça me rassure (d'autant qu'après essais, la qualité de l'image était douteuse, ce qui prouve qu'un imagecopyresampled n'est pas une opération très performante, qualitativement parlant (en plus de "prendre du CPU" comme tu le dis).
Et puis je pense qu'avec la méthode employée (mise en mémoire d'une chaîne d'octets réinterprétée comme image), tous les traitements se font sur la chaine d'octets en question (l'objet image) sans jamais qu'il n'y ait d'interprétation de code. Pour l'enregistrement de l'image finale, je suis resté sur la méthode proposée par FluxBB avec renommage complet, donc ça devrait aller.

adaur a écrit :

Pour tester ta mod, cherche un shell c99 en PHP wink

O.k., je vais essayer ! wink

Hors ligne

#22 01-04-2012 19:36:53

Wan
Membre
Inscription : 12-02-2010
Messages : 555
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Une petite remarque à propos des avatars : dans leur administration, il est possible de régler leur largeur, hauteur ou taille à des valeurs négatives... hmm déjà que zéro c'est plus que limite... siffle
Je sais que ces valeurs sont enregistrées dans la table config et que celle-ci ne contient que des varchar(255). Du coup on peut mettre à peu près n'importe quoi comme valeur : sur les avatars, si on entre autre chose que des entiers, soit ce sont des décimaux arrondis à des entiers, soit cela renvoie zéro ; mais les entiers négatifs sont acceptés ce qui n'est pas normal.

Dernière modification par Wan (01-04-2012 19:37:13)

Hors ligne

#23 02-04-2012 10:25:13

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 660
Site Web

Re : Core de FluxBB : téléchargement des avatars dans profile.php.

Wan a écrit :

... mais les entiers négatifs sont acceptés ce qui n'est pas normal.

Bonjour,

Les rapports de bug pour FluxBB, c'est là


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

Pied de page des forums