2009-04-24 5 views
3

Mon site Web aimerait que les utilisateurs téléchargent leurs photos ... mais comment éviter que mon serveur ne soit endommagé? Autoriser uniquement les fichiers JPG devrait éviter les problèmes de virus, mais que se passe-t-il si quelqu'un sélectionne un fichier 10Gb - cela ralentira-t-il l'ensemble du site?Téléchargement de photos - Comment maintenir la sécurité de mon site Web?

Nous utilisons Classic ASP et IIS6 (désolé, mais c'est comme ça, ne peut pas changer ça!). Auparavant, nous utilisions une DLL d'une société appelée Persits pour gérer les téléchargements. Cependant, il serait utile à d'autres personnes si nous étendons cette discussion à d'autres langues/technologies aussi. Les ASP ne peuvent pas détecter la taille d'un fichier tant qu'il n'a pas terminé le téléchargement, donc c'est douloureux. Ou puis-je vérifier la longueur du contenu dans l'en-tête HTTP avant de commencer le transfert?

Q1. Y a-t-il d'autres façons dont quelqu'un pourrait abuser de l'installation de téléchargement?
Q2. Comment puis-je limiter le danger de garder le site en fonctionnement et le serveur en toute sécurité?

Merci.

+0

Voulez-vous dire une société nommée "Persists"? – Eddie

+0

Non, il est orthographié Persits. –

Répondre

2

En Persiste, vous pouvez définir la taille maximum d'un utilisateur peut télécharger:

Upload.SetMaxSize 100000, True 

Le « vrai » ci-dessus montre que le fichier doit être rejetée si sur la taille maximale. Si la valeur est False, le fichier sera joué.

Voir http://www.aspupload.com/object_upload.html#SetMaxSize

+0

merci, mais est-ce qu'il télécharge tout le fichier en premier, avant qu'il ne soit trop gros? –

+0

"Une valeur définie par SetMaxSize est appliquée à chaque fichier téléchargé individuellement plutôt qu'à un téléchargement complet. permettra toujours au processus de téléchargement de passer, même si le tout premier fichier dépasse la limite spécifiée " Ainsi, le fichier sera téléchargé, puis s'il échoue, il est tronqué ou supprimé en fonction du paramètre. – Katy

+0

Hmm, c'est une honte - cela signifie qu'un fichier 10Gb serait encore monopoliser le serveur depuis des lustres, plutôt que d'être expulsé dès qu'il a dépassé 2Mb (disons). Merci d'avoir cherché ça pour moi! –

0

Cela semble appliquer la taille du téléchargement de fichier: http://www.aspupload.com/

Je ne sais pas comment il gère.

+0

Oui, c'est le composant Perse que Katy et moi mentionnons ci-dessus. Il ne vérifie pas la taille du fichier tant qu'il n'a pas terminé le téléchargement, ce qui est dommage. –

2

Si vous utilisez ASP.Net, vous pouvez spécifier une taille maximale de fichier web.config (ou machine.config), et ASP.Net jetteront une erreur après la taille est dépassée le téléchargement. C'est-à-dire, si vous spécifiez une limite de 4Mb, et que quelqu'un essaye de télécharger un 100Mb, .Net se plaindra dès qu'il aura téléchargé plus de 4Mb.

La propriété en question est maxRequestLength, qui accorsing à MSDN « Spécifie la limite du seuil de mise en mémoire tampon de flux d'entrée, en Ko. Cette limite peut être utilisée pour empêcher des attaques par déni de service qui sont causées, par exemple, par utilisateurs qui publient des fichiers volumineux sur le serveur. "

Par exemple.

<configuration> 
    <system.web> 
    <httpRuntime maxRequestLength="4000" .... 

Je ne suis pas sûr s'il existe un équivalent dans l'ASP classique.

0

Je viens de trouver un article sur la façon de limiter la taille à l'aide d'un paramètre appelé « AspMaxRequestEntityAllowed » dans IIS: http://www.banmanpro.com/support2/File_Upload_limits.asp

Cependant, cela ne fonctionne pas - mon serveur a déjà que la mise à 200k et encore nous sommes en train de télécharger des fichiers 1 Mo ok!

+0

Est-ce parce que lors du téléchargement de fichiers, l'en-tête Content-Length n'est pas présent dans la requête http? –

+0

En supposant que l'encodage de transfert en blocs l'ignore. –

0

Vous pouvez rejeter les demandes surdimensionnées au niveau IIS avant même d'arriver à votre application en utilisant l'outil UrlScan de Microsoft: http://technet.microsoft.com/en-us/security/cc242650.aspx

Pour IIS 6, il semble que vous pouvez même pas besoin. Vous devriez être en mesure de définir les propriétés de la métabase MaxRequestEntityAllowed et ASPMaxRequestEntityAllowed à la valeur maximale désirée et les demandes seront coupées à ce point.

+0

Mon serveur a déjà ASPMaxRequestEntityAllowed à 200k et pourtant nous sommes en train de télécharger des fichiers de 1 Mo ok! Cela semble l'ignorer. –

+0

Avez-vous essayé de définir les deux valeurs? Ou les téléchargements utilisent-ils un codage de transfert en bloc? En outre, je crois que ces paramètres s'appliquent uniquement à ASP, pas à ASP.NET. –

+0

Je ne peux que supposer que nous utilisons codage de transfert chunked (bien que je ne sais pas ce que c'est, désolé!). –