cocco Posté 6 Mars 2010 Posté 6 Mars 2010 Bonjour a tous et toutes. Je suis le fondateur d'un nouveau type de réseau-social évolutif. Je donne la possibilité aux membres d'envoyer sur le serveur des fichiers allant jusqu'à 32 Mo. Mon problème est le suivant, pour évité les pirates en tout genre (comme moi ) je voudrai forcer le download de tout fichier. De cette façon la brèche existante se refermera. De plus je ne sais pas comment mis prendre pour empêcher l'ouverture d'une page tierce tel que google ou LePetitPirateTropMalin par injection GET. Voici la source actuelle // infos du fichier $name = $_GET['name'].';$fichier = $_GET['name']; $nom_fichier = strrchr($fichier, 'files/');// téléchargement du fichierheader('Content-disposition: attachment; filename='.$nom_fichier);header('Content-Type: application/force-download');header('Content-Transfer-Encoding: fichier');header('Content-Length: '.filesize($fichier));header('Pragma: no-cache');header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');header('Expires: 0');readfile($fichier);
Sarc Posté 6 Mars 2010 Posté 6 Mars 2010 Bonjour, À quoi ça sert de forcer le téléchargement du fichier ? De plus, de quelle forme est le $_GET['name'] que les visiteurs atteignent normalement ? Une suite de caractères fsdijfdsp/, un autre truc ?
cocco Posté 6 Mars 2010 Auteur Posté 6 Mars 2010 Pour évité d'ouvrir un fichier qui vire la base de donnée ou qui supprime tout les pages du serveur. J'ai testé, ça marche nickel Chaque membre qui reçois une pièce joint a un lien download.php?name=files/hashfiles.extension. J'imaginai pourvoir forcer le download, comme je l'ai vue sur un grand nombre de forum avec le code source. Ou alors je devrai trouver une autre solution tel que Zipper le fichier a l'envoi.
Sarc Posté 6 Mars 2010 Posté 6 Mars 2010 Ah, je n'avais pas compris ce que tu voulais dire par "forcer le téléchargement", mais ok, c'est plus clair. Tu trouveras ton bonheur ici normalement, sur Comment forcer le téléchargement d'un fichier de developpez.com. Pour la deuxième chose, une expression régulière qui te permet de vérifier que ta variable Get n'est pas une URL ?
cocco Posté 6 Mars 2010 Auteur Posté 6 Mars 2010 Ce serai l'idéal, j'avais pensé a vérifier qu'il n'y a pas de ftp:// http:// https:// ou la virée simplement de la requête GET Merci pour le lien, je test a l'instant et je te dis quoi.
cocco Posté 6 Mars 2010 Auteur Posté 6 Mars 2010 Merci pour ton aide Sarc, J'ai trouvé un compromis global et l'ai déjà mis en place. Dans ta signature, se sont tes sites
jcaron Posté 6 Mars 2010 Posté 6 Mars 2010 Pour ma part je n'ai toujours pas compris quelle était la brêche que tu souhaites combler comme ça, et en quoi ça change quoi que ce soit? Sinon pour la partie validation, tout dépend de ce que tu fais des fichiers uploadés: est-ce-que tu conserves le nom de fichier original, tu les renommes (genre fichier1, fichier2, etc.), tu les stockes dans un seul et unique dossier, dans tout plein (problablement une meilleure option), tu les notes en base, etc. Ca me paraîtrait logique pour ma part qu'ils soient renommés, stockés dans une hierarchie de dossiers, et notés en base. Par exemple le premier fichier serait stocké comme 00/00/01, et ainsi de suite. Ainsi quand quelqu'un veut télécharger un fichier, tu passes juste son id (qui est donc facile à valider), et à partir de là tu trouves son chemin, son nom pour le Content-Disposition (à partir de la base), et hop. Mais j'ai peut-être loupé un épisode... Jacques.
Sarc Posté 6 Mars 2010 Posté 6 Mars 2010 Jacques, Il veut que si les visiteurs uploadent un fichier PHP, ils ne puissent pas l'exécuter directement sur le serveur... Parce que si le fichier uploadé monattaque.php est dans un dossier et qu'en allant sur la page pour le télécharger, il est exécuté par le serveur au lieu d'être téléchargé, ça pourrait être préjudiciable. Après, je n'ai pas fait de tests, moi, donc je sais pas si c'est faisable réellement ou pas, comme "attaque". je test a l'instant et je te dis quoi. Alors, comme ça, dans "Bienvenue chez les Ch'tits", il n'y aurait pas que des clichés ? Dans ta signature, se sont tes sites ? Je t'ai envoyé un MP, pour ne pas partir sur tous les sujets...
jcaron Posté 6 Mars 2010 Posté 6 Mars 2010 Aaaah. Ben il suffit de mettre les fichiers dans une partie qui n'est pas accessible directement via Apache. Genre si ton DocumentRoot c'est /home/monserveur/www, tu mets les fichiers dans /home/monserveur/fichiers. Comme ça il y a obligation de passer par le script de download, et rien ne sera jamais interprété comme du php. Il y aurait encore une vague possibilité que ça pose un problème avec du html qui pourrait faire des choses qui requièrent d'être dans le domaine (genre manipulation de cookies, JS cross-frame, Xmlhttprequest...) donc effectivement le download forcé peut être une bonne idée. Jacques.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant