40 votes

où est le meilleur endroit pour enregistrer des images à partir d'utilisateurs de télécharger

J'ai un site qui montre les galeries. Les utilisateurs peuvent télécharger leur propre contenu à partir du web (en entrant une URL) ou par le téléchargement d'une image à partir de leur ordinateur.

Je suis le stockage de l'URL dans la base de données qui fonctionne très bien pour le premier cas d'utilisation, mais j'ai besoin de savoir où stocker les images réelles si un utilisateur n'a télécharger à partir de leur ordinateur.

Est-il une recommandation d'ici ou de meilleures pratiques sur l'endroit où je devrais stocker ces?

Dois-je les enregistrer dans le appdata ou le contenu des dossiers? Ne devraient-ils pas être stockés avec le site parce que c'est le contenu de l'utilisateur?

62voto

Ian Mercer Points 19271

Vous ne devez PAS stocker les téléchargements des utilisateurs partout où ils peuvent être directement accessibles par une URL connue au sein de la structure de votre site. C'est un risque de sécurité que les utilisateurs peuvent télécharger .fichier htm et .js fichiers. Même un fichier avec l'extension peut contenir du code malveillant qui peut être exécutée dans le contexte de votre site par un utilisateur authentifié permettant à côté serveur ou côté client attaques.

Voir, par exemple, http://www.acunetix.com/websitesecurity/upload-forms-threat.htm et Ce que les problèmes de sécurité apparaissent lorsque les utilisateurs peuvent télécharger leurs propres fichiers? qui mentionne certaines des questions que vous devez savoir avant de vous autoriser les utilisateurs à télécharger des fichiers puis de les présenter pour télécharger l'intérieur de votre site.

  1. Ne pas mettre les fichiers dans le cours normal de votre site web structure de répertoire

  2. Ne pas utiliser le nom de fichier d'origine de l'utilisateur vous a donné. Vous pouvez ajouter une disposition du contenu de l'en-tête avec le nom de fichier d'origine afin qu'ils puissent le télécharger à nouveau le même nom de fichier mais le chemin d'accès et nom de fichier sur le serveur ne devrait pas être quelque chose que l'utilisateur peut influencer.

  3. Ne faites pas confiance à des fichiers d'image - redimensionner et de ne proposer que la version redimensionnée pour un téléchargement ultérieur

  4. Ne faites pas confiance à des types mime ou les extensions de fichier, ouvrez le fichier et de le manipuler pour s'assurer qu'il est ce qu'il prétend être.

  5. Limite de la taille de téléchargement et le temps.

8voto

dmnc Points 489

Selon les ressources que vous avez à mettre en place quelque chose comme cela, il est extrêmement bénéfique pour stocker tout ça dans Amazon S3.

Une fois que vous obtenez le télécharger il vous suffit de pousser plus à Amazon et la pop des URL dans votre base de données que vous le faites avec les autres images. Comme mentionné ci-dessus, il serait probablement sage d'ouvrir l'image et la redimensionner avant de l'envoyer. Cette fois vérifie qu'il est en fait une image et permet de s'assurer que vous n'avez pas accidentellement présenter une pleine résolution de la caméra de l'image à un utilisateur final.

Faire cela maintenant, à vous, il sera beaucoup, beaucoup plus facile si vous devez migrer/basculement de votre site et ne souhaitez pas synchroniser giga-octets de l'image de l'actif.

4voto

Trax72 Points 550

Une façon est de stocker l'image dans une table de base de données avec un varbinary champ.

Une autre solution serait de stocker l'image dans le dossier App_Data, et de créer un sous-dossier pour chaque utilisateur (~/App_Data/[nom d'utilisateur]/myImage.png).

Pour les deux méthodes, vous aurez besoin de créer une méthode d'action qui permet d'accéder aux images.

3voto

Prasanth Points 2349

Lors du téléchargement d'images dont vous avez besoin pour vérifier le contenu du fichier avant de le télécharger. L'extension du fichier de la méthode n'est pas fiable.

Utiliser la magie numéro de méthode pour vérifier le contenu du fichier qui sera d'une manière facile.

Voir la stackoverflow post et voir la liste des numéros de magie

Une façon de sauver le fichier est convertir en format binaire et les enregistrer dans notre base de données et de la méthode suivante est à l'aide de dossier App_Data.

L'option de stockage est basé sur votre condition. Voir ce post aussi

Jeu de limite de téléchargement par la définition de maxRequestLength propriété Web.Config comme ça, où la taille de fichier est spécifié dans la base de connaissances

<httpRuntime maxRequestLength="51200" executionTimeout="3600" />

0voto

rahularyansharma Points 4156

vous devriez directement poser la question à stackoverflow.com parce qu'ils sont la gestion des images avec imgur

j'ai télécharger cette image en stackoverflow.com et le chemin de cette image est http://i.stack.imgur.com/SaQGl.jpg

donc, ils peuvent vous le dire mieux que ce est la meilleure façon de le faire ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X