2008-08-22 40 views
2

J'ai un dossier dans mon serveur Web utilisé pour les utilisateurs de télécharger des photos en utilisant une page ASP.Comment sécuriser un dossier utilisé pour permettre aux utilisateurs de télécharger des fichiers?

Est-il assez sûr de donner des autorisations d'écriture IUSR au dossier? Dois-je sécuriser autre chose? J'ai peur que des pirates informatiques ne contournent la page ASP et téléchargent le contenu directement dans le dossier. J'utilise ASP classic et IIS6 sur Windows Server 2003. Le téléchargement est via HTTP, pas FTP. Editer: Modifier la question pour plus de clarté et modifier mes réponses sous forme de commentaires.

Répondre

3

également, je recommande de ne pas laisser les utilisateurs télécharger dans un dossier qui est accessible à partir du Web. Même la meilleure détection de type MIME peut échouer et vous ne voulez absolument pas que les utilisateurs téléchargent, par exemple, un exécutable déguisé en jpeg dans un cas où votre reniflement MIME échoue, mais celui dans IIS fonctionne correctement.

Dans le monde PHP, c'est encore pire, car un attaquant pourrait télécharger un script PHP illicite et y accéder plus tard via le serveur web.

toujours, stocker toujours les fichiers téléchargés dans un répertoire quelque part en dehors de la racine du document et d'y accéder via un script accédant qui ne désinfectante supplémentaire (et au moins définit explicitement une image/quel que soit le type MIME.

+0

J'accepte la réponse mais je ne suis pas encore sûr si c'est vraiment un must d'avoir le fichier dans un répertoire en dehors de la racine du document.Cela va ajouter quelques problèmes de performance je pense. –

+0

Si vous regardez correctement la mise en cache, les problèmes de performances seront négligeables. J'ai répondu comment faire ceci dans une autre question ici: http://beta.stackoverflow.com/questions/48555/best-way-to-compress-html-css-js-with-moddeflate-and-modgzip-disabled # 48761 – pilif

1

Comment l'utilisateur va télécharger les photos? Si vous écrivez une page ASP pour accepter les fichiers téléchargés, seul l'utilisateur sur lequel IIS s'exécute aura besoin d'une autorisation d'écriture sur le dossier, car IIS effectuera les E/S de fichier. Votre page ASP devrait vérifier la taille du fichier et avoir une certaine forme d'authentification pour empêcher les pirates de remplir votre disque dur.

Si vous configurez un serveur FTP ou une autre méthode de transfert de fichiers, la réponse sera spécifique à la méthode choisie.

+0

oui, j'utilise une page ASP pour faire le téléchargement, mais ... il est sûr de donner IUSR autorisation d'écriture dans le dossier? Si un hacker essaie de publier dans le même dossier, IIS sera également impliqué. –

+0

c'est probablement la méthode la plus pratique. Une autre solution consisterait à se reconnecter au serveur lui-même et à télécharger de nouveau le fichier téléchargé via FTP par exemple, mais le bénéfice en termes de sécurité pour le problème n'en vaut pas vraiment la peine. – pilif

0

Vous devrez accorder des autorisations d'écriture, mais vous pouvez vérifier le type mime du fichier pour garantir une image. Vous pouvez utiliser OFS comme si:

set fs=Server.CreateObject("Scripting.FileSystemObject") 
set f=fs.GetFile("upload.jpg") 
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr 
if instr(f.type, "image") = 0 then 
    f.delete 
end if 
set f=nothing 
set fs=nothing 

En outre, la plupart des objets COM téléchargement ont une propriété de type que vous pouvez vérifier avant d'écrire contre le fichier.

+0

Vous vous trompez. Je pose des questions sur les pirates informatiques qui contournent la page ASP. –

+0

Vous ne pouvez pas non plus garantir que le type MIME est correct car il est passé par le navigateur (si je me souviens bien). On devrait ouvrir l'image via quelque chose comme ImageMagik et vérifier que les dimensions peuvent être lues correctement. – nlucaroni

0

Votre meilleur bang pour l'argent serait probablement d'utiliser un composant de téléchargement (j'ai utilisé ASPUpload) qui vous permet de télécharger/télécharger des fichiers à partir d'un dossier qui n'est pas accessible à partir du site Web

Vous obtiendrez des hooks d'authentification et n'aura pas à vous soucier de quelqu'un qui consulte le dossier avec désinvolture et télécharge les fichiers (ou les télécharge dans votre cas), puisque les fichiers sont uniquement disponibles via le composant.