Upload d'avatars sécurisé

WRInaute accro
Salut

Je cherche à faire un upoad d'avatar le plus sécurisé possible.

Actuellement je fais ceci :

- je vérifie que le nom du fichier d'origine ne contient pas "php", "html" ou 2 "." <-- si détecté annule l'upload
- je renomme le fichier d'origine avec un non codé (md5 ... )
- je vérifie l'extension de façon basique avec pathinfo
- je vérifie la taille du fichier
- je vérifie le mime avec getimagesize mais également avec fileinfo (2 précautions valent mieux qu'une)

- Une fois ces tests effectués l'image est donc temporairement uploadée dans un répertoire inconnu et bloqué pour les utilisateurs (deny from all)
- je redimensionne (crop) l'image avec GD

Ensuite cette image est modérée avant d'être renommé id_membre.(jpg ou png) et déplacé dans le bon dossier public du site et visible de tous.

Elle sera donc affiché simplement de cette façon : <img src="id_membre.ext" />

la question qui se pose c’est comment la modérer sans risque d’exécuter un script caché malveillant? et bien vérifier lors de la modération que l'image ne contient aucun script suspect?


Pour visualiser l'image je peux toujours passer par readfile il me semble exact?
lireimg.php?nom=image.ext

mais même si l'image s'affiche correctement rien n’empêche la présence de code malveillant exact? Comment regarder l’intérieur de l’image? la source?

Si du php ou autre code malvaillant se situe dans l'image peut-il être exécuté lorsqu'on fait ceci : <img src = "imagehack.jpg" />

ou si on met l'url suivante directement : ndd.ext/images/imagehack.jpg

je ne sais absolument pas si il y a des techniques de hacks pour y arriver.

Comment empêcher également que du php soit exécuté dans certains répertoires du site?

J'ai bien vu ceci : php_flag engine off
Mais il semblerait que ça ne soit pas très fiable et bien interprété sur tous les hébergements.

Ah et derniere question comment bloquer les fonctions de type eval etc. via le .htaccess?
 
WRInaute impliqué
procedes à quelques tests :
- mets de l'html dans un fichier avec extension .html sur ton serveur, et vois s'il est exécuté
- mets du php dans un fichier toto.php.gif et vois si le php est exécuté
- desactives le php dans le rep ou se situe ce toto.php.gif et vois si le php est exécuté
- fait ton crop de toto.php.gif et vois si le code php est présent dans le source généré
donc en combinant, nommage de l'image + php desactivé + crop de l'image, tu ne prends plus beaucoup de risque.
 
WRInaute accro
Le soucis avec les tests, c’est que je ne suis pas hacker, par conséquent je ne connais pas tous les techniques de dissimulation de code dans une image.
J'en ai fait quelques uns dont ceux que tu cites.

Le seul vrai test serait surement de vérifier la source de l'image lors de la modération. Comment faire sans risque d'executer le script inclu?

J'ai également entendu parlé (lu) du null byte , mais je ne sais pas vraiment comment m'en prémunir.
je fais ceci : preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $file['name']) mais je ne sais pas si c’est suffisant.
J'imagine donc que des techniques de hacks sont assez nombreuses et que de simple petits tests d'un néophyte ne sera pas suffisant :/

PS : j’interdis les gif également qui semblent plus facilement modifiables par des hackers.
PS2 : hormi PHP_FAG engine off exit-il un autre moyen via son htaccess d’interdire toute exécution de script dans un repertoire? (même inclu dans une image)
 
WRInaute impliqué
Si du code PHP est exécuté via des fichiers images, c'est que le serveur est nase …
En principe, le PHP ne doit être interprété que pour les fichiers avec les extensions : phpX, php et phtml.
En tout cas, certainement pas des GIF, JPG, PNG, etc.
Pour moi, rien que cette protection suffit (niveau sécurité en tout cas).

Si quelqu'un met un fichier image invalide, il y aura juste une erreur au moment de l’affichage comme quoi le fichier n'est pas une image valide.
 
Discussions similaires
Haut