2009-02-17 6 views
2

J'utilise des URL expirantes pour masquer les URL des images que j'utilise sur mes sites, de sorte qu'elles ne peuvent être connectées que pendant toute la durée de vie du hachage (1 heure).Comment cacher l'URL du fichier .flv dans un lecteur flash?

Je vérifie le hachage envoyé avec l'URL du fichier, contre un hachage sur le serveur, si elles correspondent, le script appelle le code suivant:

if (isset($_GET["hash"])) { 
     $this_min = date('Y-m-d-g',time()) . "salt" . $vid_id; 
     $current_hash = substr(md5($this_min),0,12); 
     $submitted_hash = mysql_real_escape_string($_GET["hash"]); 
     if ("$current_hash" == "$submitted_hash") { 
      $file_url2 = "directory/" . $vid_file; 
      header('Content-Type: application/octet-stream'); 
      header("Content-Transfer-Encoding: Binary"); 
      header("Content-disposition: inline; filename=\"".md5($vid_file)."\""); 
      readfile($file_url2); 
      exit; 
     } else { 
      $_SESSION["message"] = "Download link expired, refresh the page and try again"; 
      $_SESSION["message_type"] = 0; 
      header("Location:" . $_SERVER['HTTP_REFERER']); 
      exit;  
     } 
    } 

J'utilise ce dans une balise (par exemple, <img src="index.php?id=123&hash=ew6rg5reg4"> Si l'image est hotlinkée, elle s'arrêtera quand le hachage changera, toutes les heures (ou minutes si nécessaire) Malheureusement, cette même méthode ne marche pas quand je l'utilise pour charger des fichiers .flv en flash joueur, tel que le joueur JW Aucun fichier .flv n'est chargé

De toute façon je peux résoudre ceci ou réaliser la même chose avec un autre méthode?

+0

Dois-je comprendre que si quelqu'un télécharge votre page web à, dire, 6:59:45, avec une connexion lente, alors la plupart des images intégrées ne parviendront pas à charger? Cela ne semble pas très chanceux ... –

Répondre

2

Vous ne pouvez pas vraiment cacher une URL de téléchargement très efficacement. Safari, par exemple, expose toutes les ressources téléchargées via la fenêtre d'activité. Recherchez simplement l'élément de taille MB et votre fichier FLV. La seule façon d'empêcher les gens d'extraire vos fichiers FLV est d'utiliser le streaming RTMP, où ils n'ont jamais accès au fichier complet.

0

Serait intéressant de savoir quelle erreur d'exécution le script du joueur lance?

Vous pouvez avoir plus de chances de le faire fonctionner avec le type MIME mis à vidéo/x-flv ou flv-application/octet-stream.

+0

aucune erreur d'exécution, ne vient pas chercher le fichier vidéo. cela n'a pas aidé. –

0

Cela devrait fonctionner correctement avec le lecteur JW, etc.

Certains serveurs, par exemple nginx, ont des modules pour effectuer très efficacement ce type de validation, donc vous n'avez pas besoin de le faire en PHP.

1

vous pouvez arrêter référants autres que votre domaine avec fils htaccess (serveur apache uniquement)

RewriteEngine On 
Options +FollowSymLinks 
     <ifmodule mod_rewrite.c> 
    RewriteCond %{HTTP_REFERER} !^$ 
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] 
    RewriteRule \.(gif|jpg|png|mp3|mpg|avi|mov|flv)$ - [F] 
    </ifmodule> 
+0

Mais le référent peut être truqué! – CaptainCodeman

0

La seule façon de limiter véritablement l'accès aux fichiers flv est de mettre en œuvre un roi d'ACL sur le serveur où le fichier est situé ou est diffusé pour. J'utilise Wowza Media pour le streaming vidéo en direct et le serveur a mis en place plusieurs mécanismes pour protéger vos fichiers/flux: Authentification ACL, StreamNameAlias ​​...

Questions connexes