Archive pour le mot-clef ‘php’

Sécuriser ses uploads

Vendredi 30 septembre 2011

Avec le piratage tout récent du site Ubuntu-fr.org qui a révélé une faille se situant dans les uploads d’images, il est normal que l’on se préoccupe de la sécurité de son propre site au niveau des uploads.

La faille en question

Mis à part des include() mal sécurisées, les injections SQL et la faille XSS, une autre faille courante se situe dans le traitement des uploads d’images. Si la vérification n’est pas faite adéquatement, un pirate peut arriver à envoyer une image en PHP sous ce format image.png\.php en faisant en sorte de tromper la vérification du type de fichier (possible avec un plugin). C’est d’ailleurs par ce procédé que le pirate a réussi à uploader un avatar en PHP contenant les instructions permettant de récupérer les accès et d’ajouter d’autres fichiers PHP sur le site. Vous pouvez en savoir plus sur l’attaque en consultant ce fil de discussion.

Comment prévenir ce type d’attaque ?

Cela dépend si vous êtes en hébergement mutualisé ou dédié/VPS, ainsi que l’utilisation ou non d’un CMS.

Dans le cas d’un hébergement dédié ou d’un VPS, vous pouvez ajouter des directives directement dans le fichier de configuration d’Apache pour interdire l’exécution de fichiers PHP dans un répertoire donné.

Sinon, si vous êtes en mutualisé, cela va aller selon votre contexte :

Utilisation d’un .htaccess

Si vous utilisez un CMS ou que les changements à apporter sur votre script d’upload ne peuvent pas être mis en ligne rapidement, vous pouvez créer un fichier .htaccess où vous y collerez les directives suivantes (merci à Willy de Servhome) :

<Files ~ "^.*\.(cgi|pl|php[3-5]{0,1}|shtm?l?|aspx?|cfml?|jsp?)$">
order allow,deny
deny from all
</Files>

Enregistrez-le puis placez-le directement dans le répertoire d’upload de votre site.
Ces directives ont l’avantage de filtrer de façon récursive dans un dossier contenant d’autres dossiers, comme c’est le cas des sites WordPress par exemple.

Même si vous avez codé votre site à la main, vous aurez au moins l’esprit plus tranquille en attendant de pouvoir retravailler votre code.

Sécuriser son code PHP

Quand le script de traitement des uploads est bien fait, il n’y a pas de risque qu’un fichier de type image.png\.php passe entre les mailles, même avec un plugin.

Pour cela, je vous invite à lire cette doc du site Commenc Ça Marche sur les erreurs de sécurité fréquentes en PHP : Erreurs courantes en PHP.

Dans le cas d’un CMS, vous pouvez toujours aller demander sur le forum de support pour savoir si le traitement des images envoyées est sécurisé contre ce type d’intrusion.