Webmaster Hub: Comment protéger l'upload / download php - Webmaster Hub

Aller au contenu

Règles du Forum

Merci de respecter les Règles du forum, et ne pas demander d'analyse de votre site.Les discussions portant sur ces sujets seront effacées sans préavis.
Si vous souhaitez des infos sur le code HTML, le CSS, Php ou MySql, les forums spécifiques sont là pour recueillir vos questions.
Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Comment protéger l'upload / download php Comment se protéger et forcer le download, plutôt que l'ouverture Noter : -----

#1 L'utilisateur est hors-ligne   cocco 

  • Groupe : Membre
  • Messages : 4
  • Inscrit(e) : 06-mars 10
  • Genre:Homme
  • Localisation:Charleroi

Posté 06 mars 2010 - 14:23

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 :whistling: ) 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 fichier
header('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);


BUFFET Christophe
0

#2 L'utilisateur est hors-ligne   Sarc 

  • Groupe : Membre+
  • Messages : 2 200
  • Inscrit(e) : 19-juillet 04
  • Genre:Homme
  • Localisation:boulevard brune, 75014 Paris
  • Société:Pioupol

Posté 06 mars 2010 - 14:42

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 ?
Hubmasteurement vôtre, Sarc
Retrouvez mes services et mon blog sur Pioupol
Ne rêvez plus d'un bon jeu de gestion, allez sur Pitimonde !
Avez vous besoin d'un tchat et forum pour ados ? {Fun-Ados V5}
0

#3 L'utilisateur est hors-ligne   cocco 

  • Groupe : Membre
  • Messages : 4
  • Inscrit(e) : 06-mars 10
  • Genre:Homme
  • Localisation:Charleroi

Posté 06 mars 2010 - 14:57

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 :hypocrite:

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.
BUFFET Christophe
0

#4 L'utilisateur est hors-ligne   Sarc 

  • Groupe : Membre+
  • Messages : 2 200
  • Inscrit(e) : 19-juillet 04
  • Genre:Homme
  • Localisation:boulevard brune, 75014 Paris
  • Société:Pioupol

Posté 06 mars 2010 - 15:07

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 ?
Hubmasteurement vôtre, Sarc
Retrouvez mes services et mon blog sur Pioupol
Ne rêvez plus d'un bon jeu de gestion, allez sur Pitimonde !
Avez vous besoin d'un tchat et forum pour ados ? {Fun-Ados V5}
0

#5 L'utilisateur est hors-ligne   cocco 

  • Groupe : Membre
  • Messages : 4
  • Inscrit(e) : 06-mars 10
  • Genre:Homme
  • Localisation:Charleroi

Posté 06 mars 2010 - 15:23

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. ;)
BUFFET Christophe
0

#6 L'utilisateur est hors-ligne   cocco 

  • Groupe : Membre
  • Messages : 4
  • Inscrit(e) : 06-mars 10
  • Genre:Homme
  • Localisation:Charleroi

Posté 06 mars 2010 - 15:56

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 :?:
BUFFET Christophe
0

#7 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 844
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 06 mars 2010 - 17:47

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.
0

#8 L'utilisateur est hors-ligne   Sarc 

  • Groupe : Membre+
  • Messages : 2 200
  • Inscrit(e) : 19-juillet 04
  • Genre:Homme
  • Localisation:boulevard brune, 75014 Paris
  • Société:Pioupol

Posté 06 mars 2010 - 18:01

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".

Citation

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 ? :p

Citation

Dans ta signature, se sont tes sites ?

Je t'ai envoyé un MP, pour ne pas partir sur tous les sujets...
Hubmasteurement vôtre, Sarc
Retrouvez mes services et mon blog sur Pioupol
Ne rêvez plus d'un bon jeu de gestion, allez sur Pitimonde !
Avez vous besoin d'un tchat et forum pour ados ? {Fun-Ados V5}
0

#9 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 844
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 06 mars 2010 - 19:41

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.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)