J´aimerai mettre sur mon site un script anti-leech,pour eviter que des personnes mette les liens sur les blogs/forums. En fait il faudrait que les fichiers soit téléchargeable uniquement depuis le site.
Sachant qu´un simple htacces ou captcha n´irai pas. (c´est un site pour la psp,et cette console ne vois pas les htacces ou autres).
Donc j´ai rechercher sur le web un script anti leech,et finalement on ma dis d´utiliser un systeme d´id. Avec une page dl.php (par exemple) et d´utiliser ce code php:
==================================================
========
define(´CFG_SYSTEM_FILENAME´, $file); // $file etant le Nom du fichier pour le système
define(´CFG_URL_FILENAME´, $imagesource); // $imagesource etant l´adresse relative du fichier
define(´CFG_SEND_FILENAME´, CFG_SYSTEM_FILENAME);
//
// Constantes à ne pas modifier
//
define(´CFG_FILESIZE´, filesize(CFG_URL_FILENAME));
define(´CFG_FILE_MD5´, md5_file(CFG_SEND_FILENAME));
define(´CFG_DATE_FORMAT´, ´D, d M Y H:i:s´);
//
// Quelques éléments nécessaires
//
error_reporting(0);
ini_set(´zlib.output_compression´, 0);
/*
//
// Gestion du cache
//
header(´Pragma: public´);
header(´Last-Modified: ´.gmdate(CFG_DATE_FORMAT).´ GMT´);
header(´Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0´);
//
// Informations sur le contenu à envoyer
//
header(´Content-Tranfer-Encoding: none´);
header(´Content-Length: ´.CFG_FILESIZE);
header(´Content-MD5: ´.base64_encode(CFG_FILE_MD5));
header(´Content-Type: application/octetstream; name="´.CFG_URL_FILENAME.´"´);
header(´Content-Disposition: attachement; filename="´.CFG_SEND_FILENAME.´"´);
//
// Informations sur la réponse HTTP elle-même
//
header(´Date: ´.gmdate(CFG_DATE_FORMAT, time()).´ GMT´);
header(´Expires: ´.gmdate(CFG_DATE_FORMAT, time()+1).´ GMT´);
header(´Last-Modified: ´.gmdate(CFG_DATE_FORMAT, time()).´ GMT´);
/*
readfile(CFG_URL_FILENAME);
==================================================
===
Je ne fait pas encore de php,mais j´ai compris l´essentiel du code (sauf début,voir plus bas),par contre ce que je ne comprend pas,c´est ce qu´il faudra faire sur la base de donnée....
En fait il faudrait que je creer une table dans ma base de donnée avec par exemple deux champs: "id" et "lien". Et que je rajoute un attribut à chaque fois que je rajoutte un fichier en téléchargement!!!
Et sinon je ne comprend pas trop le début du code:
define(´CFG_SYSTEM_FILENAME´, $file); // $file etant le Nom du fichier pour le système
define(´CFG_URL_FILENAME´, $imagesource); // $imagesource etant l´adresse relative du fichier
file je peux laisser par défault à la limite.
par contre pour image source je met quoi? Parce que je n´ai pas trop compris le truc en fait. Vous pouvez m´expliquer
![]()
Tu ne pourrais pas te contenter d´utiliser le referee de la requête HTTP vers tes fichiers ?
Certains antivirus bloquent le referer (j´ai eu des problèmes sur mon site à cause de ça).
Tu peux déjà utiliser un htaccess qui bloquera les acces exterieurs pour certains types de fichiers. Je suis en train de chercher une solution en php dans la même idée que ton script mais bloquerai les acces externes.
En fait je ne peux pas utiliser de htacess car la psp ne les vois pas,elle ne peux pas acceder aux pages ayant un htacess.
et je ne peux pas creer une page .php pour chaques fichiers à télécharger vu qu´il y en a des centaines...
J´ai eu solution, a voir si c´est fonctionnelle avec le temps :
Infos : fichier présent sur le site geneweb.fr.
1-
http://www.geneweb.fr/aide-jv/prog/telecharger.php?iddir=0&file=fichier.html
Normalement, tu n´auras qu´une page blanche.
2- http://series-sources.com/simon/header.php
Au clic, tu devrais aussi avoir une page blanche (jusque là tout va bien).
3- http://www.geneweb.fr/aide-jv/prog/
Tu peux télécharger le fichier : passage obligatoire depuis l´index
Sources :
http://www.geneweb.fr/aide-jv/prog/php.php
CCL : pour télécharger le fichier, on est obligé de passer par une page de ton site (la c´est index.php) qui va créer une variable de session valable 1min qui aura pour effet d´attester que l´utilisateur arrive depuis ton site. Tout liens depuis l´exterieur seront donc inutilisable.
"En fait je ne peux pas utiliser de htacess car la psp ne les vois pas,elle ne peux pas acceder aux pages ayant un htacess. "
Un fichier .htaccess est géré entièrement au niveau du serveur et le client n´a pas besoin d´en entendre parler. PSP ou pas PSP, ça ne devrait rien changer.
merci pour le code je vais voir s´il marche correctement et si je peux m´en servir.
Par contre,lorsqu´on navigue avec la psp on ne peux pas acceder a une page htacces,je ne sais pas ce que ca fait puisque je n´ai pas le wifi donc je ne peux pas me conneceter au web avec la psp mais en tout cas on m´a confirmer que la psp ne pouvais pas le faire.
Et c´est valable pour les captcha apparement (puisqu´impossible de télécharger un fichier depuis les hebergeur de fichiers en ligne comme dl.free.fr,megaupload,rapidshare etc...)
le code ne marche pas,c´est dommage...
meme quand je vais a cette adresse:
http://www.geneweb.fr/aide-jv/prog/
je ne peux pas telecharge rle fichier,et j´ai mis le script sur mon site (en le modifiant bien évidemment) et ca me fait pareil
Tu as les cookies d´activés ?
ba oui
chez toi ca marche?
en fait j´ai compris,ce script ne marche que sous ie... moi je suis sous firefox c´est pour ca
...c´est indépendant du navigateur et ça fonctionne aussi sur ff...
je dois avoir un pb avec mon navigateur alors
c´est pas la première fois que j´ai des soucis comme ca,enfin bon le script a l´air vraiment bien,par contre est-ce qu´il marche avec des fichiers heberger sur un ftp? (et le script étant sur un autre site web)
les pages index.php, telecharger.php et readfile.php doit etre sur le meme domaine (c´est logique car ils gêrent un cookie commun). Le fichier à dl pourrait se trouver sur un server distant mais tu dois avoir php5 sur ton hébergement, cf les fonctions :
http://fr2.php.net/manualal/fr/function.file-exists.php
http://fr2.php.net/manual/fr/function.filesize.php
$filename = realpath($filename); doit alors etre supprimé du script.
Ce ne sont que des hypothèses, a toi de tester ![]()
tu pourrai pas me contacter par msn
erazor7c6@hotmail.fr
ou sinon ca serait cool de me dire quel ligne modifié dans les trois fichiers,car j´ai l´erreur:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/144/sda/1/1/************/telecharger.php:9) in /mnt/144/sda/1/1/************/telecharger.php on line 11
la lgine 11 c´est: session_start();
session_start(), tout comme header(), ou meme setcookie(), doit etre utilisé avant tout code html ! Un simple saut de ligne gênere cette erreur :
ok :
"<?php
session_start();
?> "
ok :
"<?php session_start(); ?> "
pas ok :
"
<?php
session_start();
?> "
ca ne marche toujours pas,voici le code php de ma page index.php
<?php
session_cache_expire(1);
session_start();
$_SESSION[´site´] = time();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Page de telechargements</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
Lancement du téléchargement :<br>
<p><a
href="telecharger.php?iddir=0&file=fichier.htm
l">Telecharger le fichier</a> // je précise que j´ai bien mis le bon dossier,et je l´ai défini dans télécharger,et le fichier "fichier.html" est dispo sur le serveur dans le dossier 0 comme indiqué
</body>
</html>
je précise que j´ai aussi cette erreur la:
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/144/sda/1/1/***********/sessions) in Unknown on line 0
Et aussi,à chaque fois il me dis qu´il y a une erreur sur la ligne de "session_start();" ,et pourtant je le met en début de page comme ceci:
<?php
session_cache_expire(1);
session_start();
$_SESSION[´site´] = time(60);
?>
pour le triple post
mais en fait j´ai trouver,le problème viens de l´hebergeur free qui n´accepte apparement pas le session start? bizzare quand même...
j´ai essayer sur un autre serveur et ca passe sans problème
Par contre,mes fichiers à télécharger sont stocker sur une dedibox (serveur accessible via ftp,pas encore de serveur emulé http en place) ET donc comment dois-je faire?
en fait j´ai essayer sur un autre de mes ftp (free) de mettre un dossier "0". Dans ce dossier j´ai mis un fichier "fichier.html"
comment dois-je renseigner mon champs dans le fichier "telecharger.php"
(PS: je précise que les trois fichier .php sont sur un autre serveur que les fichier a dl)
$dossiers[0] = ´
http://*********/0/fichier.html/´;
et ca ne marche pas,pourquoi?