2010-10-29 26 views
1

J'ai formulaire ASP.NET avec un contrôle de téléchargement pour les utilisateurs de poster une image. Sur le serveur, je charge cette image (en utilisant la classe Bitmap) et la redimensionne.Le chargement et le redimensionnement d'une image téléchargée peuvent-ils être dangereux?

Y a-t-il un danger à le faire lorsque les utilisateurs téléchargent des fichiers malveillants ou affectés ou le code va-t-il simplement lancer une exception à un moment donné et arrêter le processus entier?

Répondre

1

Le meilleur hacker peut espérer utiliser l'exploit Buffer Overflow, puis il écrit du code malveillant dans la mémoire du serveur. Cependant, d'après ce que j'ai lu, une telle chose peut se produire seulement en utilisant un code dangereux, et puisque Bitmap est totalement géré, je suis à peu près sûr qu'il est sûr de l'utiliser. Cependant, un pirate vraiment intelligent peut tromper le Bitmap et créer un fichier image "personnalisé" qui sera une image parfaitement valide, mais qui contiendra également du code "hitchhiker" qui pourrait causer des dommages lors de la visualisation dans le navigateur, en utilisant de futurs exploits. Le moyen le plus sûr est de sauvegarder le Bitmap lui-même sur le disque au lieu du fichier téléchargé brut, ce qui signifie utiliser la méthode bitmap.Save à la place de la méthode SaveAs de HttpPostedFile. De cette façon, tout code supplémentaire sera omis, car le Bitmap ne le chargera pas et vos visiteurs seront en sécurité. Par ailleurs, vous pouvez stocker les fichiers téléchargés en dehors du dossier racine du site, et créer un fichier "proxy" pour le lire à partir du dossier: de cette façon, les utilisateurs ne seront pas en mesure de naviguer directement vers les images, ils ' ll faut utiliser le fichier proxy. Ceci est utile si vous ajoutez un mécanisme d'autorisations à un moment donné, par ex. L'utilisateur A ne devrait pas être capable de voir ce que l'utilisateur B a téléchargé.

+0

Merci, nous sommes déjà en train de redimensionner les images en utilisant la classe Bitmap afin qu'elles soient sauvegardées par là ... – Koen

+0

Salutations, pour autant que je puisse dire que vous n'êtes pas en danger. :) –

0

Je voudrais:

Assurez-vous que le fichier téléchargé est sans aucun doute une image pour que les gens ne peuvent pas télécharger des choses arbitraires - mais vous avez probablement couvert de classe qu'il Bitmap. Renommez le fichier une fois téléchargé afin que quelqu'un ne sache pas le nom du fichier qu'il a créé.

Assurez-vous que le répertoire de téléchargement dispose d'autorisations minimales.

Assurez-vous que le contenu du répertoire de téléchargement ne peut pas être affiché dans un navigateur.

+0

Nous renommons les fichiers mais ils sont hébergés publiquement car nous devons évidemment les afficher à un moment donné. Évidemment, je veux éviter que les fichiers malveillants arrivent dans le dossier de téléchargement. Nous vérifions également le type de contenu de la classe HttpPostedFile. – Koen