Interdire téléchargement en dehors de mn site

Fermé
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 - 23 juin 2010 à 21:48
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 - 29 juil. 2010 à 14:34
Bonjour,

Je voudrait autoriser le téléchargement d'un fichier ZIP que par mon site , par exemple.

je veut que quand on tape sur la barre d'adresse www.monsite.com/Fichier.zip sa ne se télécharge pas.

mais si on est sur mon site par exemple :

www.monsite.com/page_de_télechargment.html et qu'on clique sur

www.monsite.com/Fichier.zip

sa se télécharge.

j'ai essayer sa , avec un .htaccess :

Allow .monsite.com
Deny all
Order Allow

Et sa marche pas , quelqu'un a une idée ?

A voir également:

26 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 01:34
Salut.

Tu peux faire un script de téléchargement en PHP.
Tu pourras utiliser le "referer HTTP" pour savoir d'où provient l'utilisateur.

telechargement.php?fichier=example.zip
<?php
$dossier = 'private';

if (isset($_GET['fichier']) && !empty($_GET['fichier'])) {
	if(isset($_SERVER['HTTP_REFERER']) && preg_match('#^https?://'.$_SERVER['SERVER_NAME'].'/#i',$_SERVER['HTTP_REFERER'])) {
		if (file_exists($dossier.'/'.$_GET['fichier'])) {
			header('Content-type: application/pdf');
			header('Content-Disposition: attachment; filename="'.$_GET['fichier'].'"');
			header('Content-Length: '.filesize($_GET['fichier']).";\n");
			header('Content-Type: application/octet-stream; ');
			header('Content-Transfer-Encoding: binary');
			header('Pragma: public');
			header('Expires: 0');
			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
			header('Cache-Control: private',false);
			readfile($dossier.'/'.$_GET['fichier']);
		} else {
			echo 'Fichier introuvable';
		}
	} else {
		header('Content-type: text/html; charset=utf-8');
		echo 'Vous n\'êtes pas autorisé à télécharger ce fichier !';
	}
} else {
	echo 'Erreur';
}
?>
N'oublie pas de protéger le dossier privé avec un .htaccess.
1
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 14:37
Salut sa te dérange pas de me dire ou faut mettre le téléchargement de fichier parce que le php je m'y connais pas trop.

Et pour le htaccess , je le protege avec un mot de passe sa craint pas pour le téléchargment ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 14:47
Il suffit de placer le code que je t'ai donné dans le fichier "telechargement.php".
Pour télécharger un fichier dans le dossier "private" (protégé par un mot de passe), il suffit de mettre le nom du fichier après "telechargement.php?fichier=".
Exemple :
<a href="telechargement.php?fichier=exemple.pdf">PDF</a>
Pour télécharger le fichier "private/exemple.pdf".

Tu peux mettre un mot de passe avec un .htaccess, ça ne craint rien : c'est PHP qui va chercher le fichier dans le dossier, le .htaccess ne servira à rien puisque PHP ne passe pas par HTTP : il lit directement le fichier sur le disque dur. Par contre, le .htaccess empêchera l'internaute de télécharger le fichier via HTTP (qui est la seule méthode, sauf par FTP, mais il n'est pas censé avoir le mot de passe du FTP).
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
Modifié par AmoCore le 24/06/2010 à 15:18
j'ai suivi à la lettre , mais le fichier en question ne se télécharge pas et sa ecrit Vous n'êtes pas autoriser

<a href="telechargement.php?fichier=Test.zip">Test</a>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Leviathan49 Messages postés 257 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 22 juillet 2011 70
24 juin 2010 à 15:33
Sinon pour ton htaccess c'est plutôt :
Order Deny,Allow
Allow from monsite.com
Deny from all
Pour empêcher de récupérer directement le fichier zip à partir d'un autre site, si tu utilise un script php comme si dessus, tu peux même empêcher toutes les connections avec un :
Order Allow, Deny
qui refuse tout par défaut.
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 15:46
Sa bloque rien quand je fait sa.

Enfaite moi se que je veut c'est que personne ne peut accéder au téléchargement sa être dans mon site parce que avec ce htaccess , si je tape l'adresse correcte sur mon navigateur sa le télécharge quand même.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 15:58
Ce que je t'ai proposé fonctionne parfaitement.
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 16:00
Alala suis dans une galère pas possible , tu pourait m'aider par msn ? fain avec assistance à distance , s'il te plait ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 16:05
On récapitule :

- Crées un dossier "private" dans lequel tu places tes fichiers protégés et un .htaccess contenant "Deny from all" (sans les guillemets).

- Crées un fichier "telechargement.php" contenant le long code

- Pour télécharger le fichier "exemple.pdf" dans le dossier "private", il te suffit de faire ce lien :
<a href="telechargement.php?fichier=exemple.pdf">...</a>
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
Modifié par AmoCore le 24/06/2010 à 16:22
J'ai fait exactement sa , j'ai même refait exactement ton script avec le exemple.pdf

Mais rien n'y fait.

J'ai tout recommencer depuis le début étape par étape , sa fait toujours vous n'êtes pas autoriser à télécharger se fichier.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 16:37
Dans le script "telechargement.php", ajoute ceci au début (après "<?php" quand même) :
var_dump($_SERVER['HTTP_REFERER']);
var_dump($_SERVER['SERVER_NAME']);
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 16:47
NULL string(18) "MONSITE.com"
Warning: Cannot modify header information - headers already sent by (output started at /mnt/weba/30/99/52424199/htdocs/telechargement.php:3) in /mnt/weba/30/99/52424199/htdocs/telechargement.php on line 25
Vous n'?tes pas autoris? ? t?l?charger ce fichier !

Par contre je vien de trouver un script php

Il marche à la racine de mon site. mais pour le dossier private je ne sais pas comment y procedé

et quand je met $dossier = 'private'; sa marche plus ^^

voila le script en question :

<?php

$file=$_GET['file'];

if (($file != "") && (file_exists("./" . basename($file))))
{
$size = filesize("./" . basename($file));
header("Content-Type: application/force-download; name=\"" . basename($file) . "\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
readfile("./" . basename($file));
exit();
}
?>
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 16:55
Le script que tu as trouvé ne vérifie pas si l'utilisateur provient de ton site ou non avant de lancer le téléchargement.

Pour revenir au miens, apparemment, $_SERVER['HTTP_REFERER'] n'existe pas.
Est-ce que tu accèdes à "telechargement.php?fichier=exemple.pdf" en cliquant sur le lien ou en tapant directement l'URL dans la barre d'adresse ? Si tu cliques sur le lien, le referer devrait exister.
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 17:02
j'ai crée une page (page_de_test.html) j'ai mis le lien au mileu de la page et sa fait la meme erreur que si je l'ecrit dans la barre d'adresse.

Parcontre je vien d'avoir une idee , tu ma dit seul le php est autoriser pour télécharger dans un dossier priveé ? alors regarde se que j'avais penser a faire.

de cacher le lien avec un java script , puis lancement d'un php qui fait redirection vers un deuxième php qui est dans le dossier private , aprés quand l'utilisateur sur firefox après avoir télécharge le fichier il fait clique droit copier l'adresse d'origine de téléchargement , il va la copier exemple (téléchargment2.php ou nomdufichier.php) et quand il vas la coller il n'y aura aucun accès avec htaccess ?

Tu pense que sa devrait marcher ?
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 17:42
Je vien d'essayer , et j'ai un petit problème

Au moment ou sa ouvre le 2 eme php

Forbidden

You don't have permission to access /Private/1.php on this server.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 18:29
Si tu fais une redirection, c'est le visiteur qui ira chercher le fichier, pas PHP.
Le serveur va dire au visiteur de charger l'URL, et il va le faire, de la même façon qu'avec un lien.
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
24 juin 2010 à 18:57
Ta pas un autre idee ? si non ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
24 juin 2010 à 22:30
Non.
Je viens encore de tester et ça fonctionne parfaitement.
0
AmoCore Messages postés 85 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 22 mai 2015 3
Modifié par AmoCore le 29/07/2010 à 02:17
Salut , (Oais un peu tard) Mais j'ai trouver d'où sa viens , le problème c'etait que le nom du fichier est "test.zip" , et moi j'ai mis "Test.zip" ^^

Sayé sa marche nickel encore merci, Mais par contre ,sa télécharge en pdf ? comment faire pour qu'il soit en zip ?

EDIT : Faut changer dans le texte "application/pdf"changer 'pdf' et mettre 'zip'
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
29 juil. 2010 à 10:09
Tu peux retirer la ligne header('Content-type: application/pdf'), il y a un autre "Content-Type" plus loin.
0