Movie FLV Player - Quelle verstecken

fixxxxxi

Erfahrenes Mitglied
Hallo, ich habe einen MoviePlayer auf meiner Homepage eingebaut, welcher FLV Dateien abspielt. Der Link zu den FLV Dateien befindet sich in einer Datenbank, und wird als $location ausgegeben.

In der dazugehörigen Template Html wird dann die $location in den SWF Player geladen und abgespielt. Dies funktioniert auch alles ohne Probleme. ABER - Ich möchte, das man den Pfad zu der abgespielten File nicht aus dem Quelltext auslesen kann! Wie aknn ich dies realisieren?

Der Teil der PHP, in welchem sich die PLAY action befindet sieht wie folgt aus:

PHP:
	// TO-N8 TV Video Show

elseif($action=="play") {

  $fileID = $_GET['fileID'];
	if($fileID) {

        
        //Views pro Movie
		$views = "update ".PREFIX."files set downloads = downloads+1 where fileID =$fileID";
    mysql_query($views); 


			$file=mysql_fetch_array(safe_query("SELECT * FROM ".PREFIX."files WHERE fileID='$fileID'"));
			$filecats=str_replace('value="'.$file['filecatID'].'"', 'value="'.$file['filecatID'].'" selected', $filecats);
			
			$cat=mysql_fetch_array(safe_query("SELECT * FROM ".PREFIX."files_categorys WHERE filecatID='".$file['filecatID']."'"));
	    $category = '<a href="index.php?site=files&cat='.$cat['filecatID'].'"><strong>'.$cat['name'].'</strong></a>';
			
			//Bewertung
... ... ...

	// Uploader
	$uploader = cleartext('[flag]'.getcountry($file['poster']).'[/flag]').' <a href="index.php?site=profile&id='.$file['poster'].'">'.getnickname($file['poster']).'</a>';
	$fileinfo = cleartext($file['info']); 
	$filename = $file['filename'];
	$downloads = $file['downloads']; if(!$downloads) $downloads=0;
	
	$location = '<font color="#FFFFFF">Du musst eingeloggt sein, um diesen Teil der Homepage zu betreten!</font>
              <br><br>
              <font color="#FFFFFF">• </font><a href="index.php?site=register"><font color="#FFFFFF">Jetzt registrieren</font></a><br>
			        <font color="#FFFFFF">• </font><a href="index.php?site=lostpassword"><font color="#FFFFFF">Passwort vergessen</font></a><br>
			        <font color="#FFFFFF">• </font><a href="index.php?site=login"><font color="#FFFFFF">Einloggen</font></a>
              '; 
	if($loggedin) $location = '<a  
			 href="'.$file['file'].'"  
			 style="display:block;width:445px;height:334px"  
			 id="player"> 
		</a>'; 
   		
			// Video zeigen
			$bg1=BG_1;
			$bg2=BG_2;
			$border=BORDER;
			$pagebg=PAGEBG;
			eval ("\$files_play = \"".gettemplate("files_play")."\";");
			echo $files_play;

      // Kommentare
	    $comments_allowed = 2;
		  $parentID = $fileID;
		  $referer = "index.php?site=files&file=$fileID";

		include("comments.php");;

	} else redirect("index.php", "FileID fehlt zum Abspielen des Movies.", "3");
}

Die dazugehörige Template HTML sieht so aus:

PHP:
...
</table>

	<script type="text/javascript" src="js/flowplayer-3.1.0.min.js"></script>
	<script>
	flowplayer("player", "flowplayer-3.1.0.swf");
	</script>

<div align="left">
	<table border="0" cellpadding="0" cellspacing="0" width="500">
							<tr>
			<td height="25">&nbsp;</td>
		</tr>
		<tr>
			<td colspan="3" height="23" background="images/tv_oben.gif">&nbsp;</td>
		</tr>
		<tr>
			<td background="images/tv_links.gif" width="28">&nbsp;</td>
			<td width="445" height="334" bgcolor="#000000">		$location </td>
			<td background="images/tv_rechts.gif" width="27">&nbsp;</td>
		</tr>
...

LG Chris

so hab eine lösung gefunden, aber noch nicht die entgültige...

PHP:
<?php
header("Content-type: application/flv");
header("Content-Disposition: attachment; filename=datei.flv");
readfile('http://domain.de/ordner/datei.flv');
?>

aber ich möchte den direkten zugriff verhindern - ich habe da an sowas gedacht...

PHP:
// no direct access
defined ('index') or die ( 'no direct access' );

ABER was ich nicht verstehe, was bedeutet dieses index? also auf was bezieht sich diese definition?

Hab gemerkt, das DEFINE mich nicht weiterbringt! Ich möchte, dass die file2.php erkennt, dass sie von der file1.php aufgerufen wird und daraus einen schutz basteln. hätte aber gerade keine idee wie du das umsetzen könnte. Weiß jemand eine Lösung?
 
Hallo,

meiner Meinung nach kommst du da nur mit einer Session weiter. In deiner "Template HTML" definierst du eine Session-Variable und in dem PHP-Script fragst du diese Session-Variable ab. Wenn sie gültig war, wird sie wieder gelöscht und das flv zum Anschauen freigegeben. Wenn sie nicht gültig war, kannst du user-friendly eine Fehlermeldung ausgeben.

Zu dem define:

Das bringt dir nur was, wenn das PHP-Script das "Template HTML" includet, da das Define sonst nicht gesetzt ist.

Kurz gesagt: Versuch es mit Session, da gibt es definitiv eine Lösung für.
 
Hab es ähnlich einer Session gelöst. In der Datei, welche den die File verlinkt, habe ich folgende SQL Abfrage hinzugefügt:

PHP:
//Session setzen
safe_query("UPDATE ".PREFIX."files SET session='1' WHERE fileID='$fileID'");

In der PHP, welche den tatsächlichen Filelink ausgibt, wird dieses Feld nun ausgelesen, und auf den Ursprungswert gesetzt:

PHP:
<?php

include("../../_mysql.php");
include("../../_settings.php");

$fileID=$_GET['fileID'];

//Session auslesen
$session=mysql_query("SELECT * FROM ".PREFIX."files WHERE fileID='$fileID'");
$sql_session=mysql_fetch_array($session);
if($sql_session['session']=='1')
{
//Session beenden
safe_query("UPDATE ".PREFIX."files SET session='0' WHERE fileID='$fileID'");
$file=mysql_fetch_array(safe_query("SELECT * FROM ".PREFIX."files WHERE fileID='$fileID'"));

header("Content-type: application/flv");
header("Content-Disposition: attachment; filename=to-nacht.de___Moviecenter.flv");
readfile(''.$file['file'].'');
}
else
Header("Location: /index.php?site=error403");
exit(); 
?>

So wird zum einen nicht der tatsächliche Filepfad und die File selbst angezeigt, sondern nur der Link zur Zweiten File, und es wird nur der Link für gültig erkannt, wenn dieser durch die erste PHP aufgerufen wurde.

Thx für den Gedankenanstoß :P
 
Das ist aber gefährlich. Wenn es zwei user gleichzeitig auf den Link klicken, schaut der erste in die Röhre. Folgendes Beispiel

User A => schaut Seite mit Link zum Video an => Klickt auf Link => PHP-Seite läd und würde den Redirect auf das Video machen aber:
User B => schaut Seite mit Link 1 Sekunde später an => Klickt auf den Link => PHP-Seite ist sehr viel schneller aufgebaut als bei User A; Redirect folgt, session-Spalte wird zurück gesetzt.

User A schaut jetzt verdutzt, das er einen 403er bekommt.

Ich weiß, dass das sehr theoretisch ist. Aber deine Lösung ist nicht wirklich das Gelbe vom Ei. Nur so als Hinweis ;-)
 
In der Theorie mag es so sein wie du sagst, aber in der Praxis funktioniert es. Haben es getestet, und dein Szenario durchgespielt.

Da sich der Stream nicht ständig ändert, sondern ja nur einmal der Link ausgegeben wird, funktioniert es. Der Link wird ja aus der DB ausgelesen und nicht dynamisch erstellt.

User A -> bekommt den Link und schaut sich den Film an.
User B - > klickt 1 sekunde später auf den Link und bekommt den Link auch, was aber User A nicht beeinflußt, da er den Link ja bereits hat.
 
Zurück