2009-09-08 6 views
2

J'ai créé une galerie de photos qui utilise Paperclip et valide le type de contenu en utilisant validates_attachment_content_type.Téléchargement sécurisé de fichiers dans Ruby On Rails

L'application s'exécute sur un hôte partagé avec Passenger.

Est-il possible de contourner la validation et d'exécuter des scripts malveillants à partir du répertoire public/images? Si c'est le cas, y a-t-il quelque chose que je puisse faire pour éviter que des scripts malveillants ne tournent ou ne soient téléchargés?

Répondre

5

Est-il possible de contourner la validation et d'exécuter des scripts malveillants à partir du répertoire public/images?

Oui. Vous pouvez avoir un fichier d'image rendable parfaitement valide qui contient également du HTML avec l'injection de script. Merci pour le reniflement du contenu bidon, IE, vous avez tout gâché.

Voir http://webblaze.cs.berkeley.edu/2009/content-sniffing/ pour un résumé.

Si tel est le cas, y a-t-il quelque chose que je puisse faire pour éviter que des scripts malveillants ne tournent ou ne soient téléchargés?

Pas vraiment. En théorie, vous pouvez vérifier les 256 premiers octets pour les balises HTML, mais vous devez alors connaître les détails exacts de ce que les navigateurs recherchent pour le contenu, et garder cette information complète et à jour est un non-démarreur.

Si vous traitez les images et les réenregistrez vous-même afin de vous protéger. Dans le cas contraire, effectuez l'une ou les deux:

  • servent uniquement les fichiers téléchargés par l'utilisateur à partir d'un nom d'hôte différent, donc ils n'ont pas accès aux détails des cookies/auth qui permettrait à un script injecté XSS dans votre site . (mais attention aux attaques non-XSS comme les exploits généraux de JavaScript/plugin)

  • servir les fichiers téléchargés par l'utilisateur via un script côté serveur qui inclut l'en-tête 'Content-Disposition: attachment', de sorte que les navigateurs n'essaient pas pour voir la page en ligne. (mais regardez les anciennes versions de Flash en l'ignorant pour les fichiers Flash) Cette approche signifie également que vous n'avez pas besoin de stocker des fichiers sur le système de fichiers de votre serveur sous le nom de fichier fourni par l'utilisateur, ce qui vous évite travail de validation de nom de fichier correct.

+0

Si vous redimensionnez des images (via ImageMagick), le script HTML + "survit"-il au changement? –

+2

Non, tous les octets du flux compressé seraient recompressés et perdus. Toute autre structure (par exemple un champ de commentaire) ne doit pas être rejetée lors de la création d'une version plus petite d'une image. En théorie, si vous connaissiez à l'avance les paramètres de redimensionnement précis, vous pourriez créer une image qui, une fois redimensionnée et compressée, se retrouverait avec des octets de type HTML dans le flux résultant, mais ce serait une attaque très difficile. Pratiquement tout à fait infaisable. Je n'ai certainement jamais entendu parler de ça. – bobince