Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
wmv-Player & htaccess [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
wmv-Player & htaccess


 
Nordin
13-01-2010, 20:47 
 
Hallo,

ich stehe vor folgendem Problem:

Ich habe ein einem wmv-Player der wmv-Dateien aus einen Ordner anzeigen soll der mit htaccess wie folgt geschützt ist:

SetEnvIfNoCase Referer "^http://www.meineseite.com/" ref

Order Deny,Allow
Deny from all
Allow from env=ref

Rufe ich eine wmv direkt per link auf, funktioniert dies natürlich nicht. So soll es ja auch sein.

Aber blöd ist, dass der Player sie auch nicht abspielt:
<embed src="http://meineseite.com/movies/film.wmv" type="application/x-mplayer2"
width="200"
height="150"
align="center"
border="0"
autostart="1"
transparentatstart="0"
animationatstart="1"
showcontrols="true"
showaudiocontrols="1"
showpositioncontrols="1"
autosize="1"
showstatusbar="1"
displaysize="true">
</embed>

Weiß jemand Rat?

Gruß Nordin

 
wahsaga
13-01-2010, 20:52 
 
Vermutlich sendet der Player gar keinen Referer.

Leeren Referer auch erlauben ist die Standardlösung.

 
AmicaNoctis
13-01-2010, 20:54 
 
Mit großer Wahrscheinlichkeit wird der Player gar nicht wissen, von welcher Seite aus er eingebettet wurde und kann daher auch keinen Referer-Header senden.

Gruß,

Amica

Edit: ups, zwei Minuten zu spät abgeschickt ;)

Edit2: Was du zusätztlich beachten musst http://www.example.com ist nicht dasselbe wie http://example.com

 
fireweasel
13-01-2010, 20:59 
 
Ich habe ein einem wmv-Player der wmv-Dateien aus einen Ordner anzeigen soll der mit htaccess wie folgt geschützt ist:

SetEnvIfNoCase Referer "^http://www.meineseite.com/" ref

Order Deny,Allow
Deny from all
Allow from env=ref

Rufe ich eine wmv direkt per link auf, funktioniert dies natürlich nicht. So soll es ja auch sein.


Du könntest dir eine einfache HTML-Seite basteln, die einen Link zur WMV-Datei enthält.
Die lädst du auf den Server hoch und rufst sie mit dem Browser auf.
Dann klickts du auf den Link. In dem Fall müsste der Browser die Datei "anzeigen" oder zum Download anbieten. Kommt eine Fehlermeldung, weißt du, dass mit deiner Konfiguration irgendwas nicht stimmt, weil Browser in der Standardeinstellung den Referrer mitschicken.


Aber blöd ist, dass der Player sie auch nicht abspielt:

Prüfe, welchen Referrer der Browser an den Server sendet (oder ob er überhaupt einen mitschickt), wenn er den Player "aufruft".

Update: Mist, zu spät! ;)

 
Nordin
13-01-2010, 21:00 
 
Kann ich dem Player irgendwie einen Refferer mitteilen?

Wenn ich einen leeren Refferer erlaube dann kann man die Datei doch auch direkt aufrufen richtig? - Wenn ja dann ist das natürlich nicht Sinn und Zweck.

 
AmicaNoctis
13-01-2010, 21:02 
 
Kann ich dem Player irgendwie einen Refferer mitteilen?

Eher nicht. Referrer information with embedded media player - Dev Articles (http://forums.devarticles.com/advanced-web-development-41/referrer-information-with-embedded-media-player-63026.html)

 
fireweasel
13-01-2010, 21:16 
 
Kann ich dem Player irgendwie einen Refferer mitteilen?

Wenn ich einen leeren Refferer erlaube dann kann man die Datei doch auch direkt aufrufen richtig? - Wenn ja dann ist das natürlich nicht Sinn und Zweck.

Ich sehe in dieser Art von Pseudo-Verbarrikadierung über einen HTTP-Header, der keinerlei Relevanz hat und beliebig manipuliert werden kann, überhaupt keinen Sinn und keinen Zweck. Mir gehen solche Websitebetreiber auf den Zeiger, die meinen, damit den Abruf ihrer Ressourcen irgendwie zu erschweren.

Entweder machst du das Zeug frei zugänglich, oder du schränkst den Nutzerkreis auf eine sinnvolle Weise, wie bspw. Benutzer-Authentifizierung, ein. Das wären saubere Lösungen. Letztere für den Fall, dass du Angst vor zu viel Download-Traffic hast. Alles andere lässt sich umgehen.

Schau dir für diesen Zweck einfach mal die Manpages für wget (http://www.gnu.org/software/wget/manual/wget.html#index-http-referer-95) an. Das Hinzufügen eines HTTP-Referrers ist da ein Kinderspiel, und andere Downloadmanager machen das teilweise automatisch. Diese Art von Versteckspiel wirkt dadurch irgendwie sinnbefreit. ;)

 
Nordin
13-01-2010, 23:25 
 
@fireweasel

Ganz starke Aussage! Top! Weil du auch weißt wofür das benötigt wird. unfassbar...

Schonmal was von Jugendschutz gehört?
Die Dateien dürfen leider nicht direkt erreichbar sein.
In einem AVS geschützten Mitgliederbereich befindet sich der Player der die Daten aus dem htaccess Ordner holt.

 
TobiaZ
13-01-2010, 23:38 
 
Deswegen ist es immer gut, wenn man von vorn herein die ganze Situation schildert, und nicht nur das, was man sich gerade in den Kopf gesetzt hat. Denn viele Köpfe haben oft mehr Ideen, als einer.

Dein geschützter Bereich verfügt ja sicher über einen Schutz. Dann solltest du diesen Schutz auch auf die Dateien anwenden und nicht nur auf die HTML-Seite die den Player einbindet.

Im konkreten Fall wird das vermutlich eine Session sein, aber bitte maul mich nicht auch an, wenn ich falsch liege. ;) Alles was nicht explizit erklärt wird, können wir nur vermuten.

Auch jeder 14 jährige ist in der Lage nen Header nach der o.g. Methode zu manipulieren. Ich denke das dürfte man inzwischen sogar in der Schule lernen.

 
Nordin
13-01-2010, 23:44 
 
Also wie eben schon geschrieben ist es ein Bereich der nur für eine jugendliche ab 18 ist... keine dieser Dateien darf Direkt erreichbar sein, darum sind sie in einen htaccess geschützten Ordner. Diese Dateien kann man per Player anschauen. Dieser Player liegt in einem Session geschützten Memberbereich... dort kommt man wiederum erst rein wenn man durch ein AVS durch gekommen ist.

 
TobiaZ
14-01-2010, 00:06 
 
Ja, dann hab ich ja ins Schwarze getroffen. Lösung steht oben. ;)

 
unset
14-01-2010, 09:45 
 
@fireweasel

Ganz starke Aussage! Top! Weil du auch weißt wofür das benötigt wird. unfassbar...

Schonmal was von Jugendschutz gehört?
Die Dateien dürfen leider nicht direkt erreichbar sein.
Dann weißt du ja auch, dass du den Zugang wirksam schützen musst … eine Erschwerung ist kein Schutz!

 
pekka
14-01-2010, 17:35 
 
Wie Unset schon sagt: Mit einer reinen Refererprüfung schießt Du dir selbst ins Bein, weil diese viel zu leicht zu umgehen ist.

Wenn Du es sauber machen willst, wirst du nicht drumrumkommen, die WMV-Inhalte der Session-Prüfung zu unterziehen, wie Du es mit den umgebenden HTML-Seiten ja wahrscheinlich schon machst.

 
Nordin
15-01-2010, 01:18 
 
also in den php dateien die geschützt sind habe prüfe ich ob der user sich eingeloggt hat (also aub eine bestimmte session variable existiert die beim login erstellt wurde) ... aber wie mache ich das mit wmv?

 
TobiaZ
15-01-2010, 01:37 
 
Vom Prinzip her genauso. Eine PHP-Datei, die die Überprüfung vornimmt und die wmv-Datei nur ausliefert, wenn die Überprüfung erfolgreich (=positiv) war.

 
AmicaNoctis
15-01-2010, 02:06 
 
Am einfachsten mit Wegwerflinks welche die Session-ID enthalten, nur von der Adresse aus gültig sind, mit der die Session gestartet wurde und nur so lange, wie die Session existiert.

 
fireweasel
15-01-2010, 11:31 
 
@fireweasel
Ganz starke Aussage! Top! Weil du auch weißt wofür das benötigt wird. unfassbar...

Nö, da du es anfangs nicht verraten hast, wusste ich es nicht. Und ich gebe gern zu, dass ich, wenn ich von solchen Referrer-Spielchen lese, zuerst immer an Webmaster denke, die
Traffic-Mengen reduzieren möchten. Die allerwenigsten kommen auf die Idee, damit Zugangskontrollen bauen zu wollen.

Denn dafür gibts bessere Lösungen, auf die ich auch hingewiesen hatte.

Was in ...
..., oder du schränkst den Nutzerkreis auf eine sinnvolle Weise, wie bspw. Benutzer-Authentifizierung, ein. ...
... hast du nicht verstanden?

Für weniger kritische Anwendungen, die nicht den (deutschen) Altersschutzbestimmungen genügen müssen, hatte ich an anderer Stelle schon einen Vorschlag gemacht:

http://www.php-resource.de/forum/php-developer-forum/98445-einmaliger-download-einer-datei-nach-codeeingabe.html#post632448

(Damit du nicht auf den Gedanken kommst, ich würde nur destruktiv argumentieren.)


Schonmal was von Jugendschutz gehört?


Nein, ich wohne in einem freien Land. Bei uns hier brauchen wir die Jugend nicht vor WMV-Dateien zu schützen, weil sie mit genügend Medienkompetenz ausgestattet ist und von liebevollen und fürsorglichen Eltern großgezogen wird ... ;)


Die Dateien dürfen leider nicht direkt erreichbar sein.


Was sie aber sind, wenn als vermeintlicher "Schutz" nur eine Referrer-Abfrage existiert, die von diversen Downloadtools automatisch ausgehebelt wird.
Langsam fange ich an zu verstehen, was gemeint sein könnte, wenn ein Script-Kiddie sich in einem Image-Board brüstet, einen Pr0n-Server "geknackt|gehackt" zu haben. ;)


In einem AVS geschützten Mitgliederbereich befindet sich der Player der die Daten aus dem htaccess Ordner holt.


Wenn du eh schon nur einem beschränkten Nutzerkreis Zugang gewährst, wozu brauchst du dann noch die Bastelei mit dem Referrer?

Was man sich aus den von dir bisher gelieferten Informationen zusammenreimen kann, ist dies:

Du hast eine Altersverifikation. Die ist in ein PHP-Formular (oder etwas ähnliches) eingebettet. Jetzt möchtest du diesen "Jugendschutz" auf einen Haufen WMV-Dateien übertragen, die irgendwo anders in einem Verzeichnis auf deinem Webserver zum Download bereitliegen. HTTP-Authentifizierung scheinst du nicht zu verwenden, da mit dieser dein Downloadverzeichnis gleich mitgeschützt werden könnte.

Lesetipp: User Authentication with Apache and PHP (http://www.devshed.com/c/a/PHP/User-Authentication-With-Apache-And-PHP/)

Du könntest jetzt, wie vorgeschlagen, ein PHP-Script basteln, über das zwingend alle Downloads laufen. Dann solltest du das Verzeichnis mit den WMV-Dateien komplett aus dem WWW-Root entfernen. Es reicht, wenn das PHP-Script darauf Zugriff hat.

Nur hat so eine Lösung den Nachteil, dass für jeden Downloadversuch die PHP-Script-Engine angeschmissen werden muss. Das nennt man "mit Kanonen auf Spatzen schießen".

Zusätzlich muss dann das PHP-Script alle Fähigkeiten nachbilden, die der Webserver fürs Ausliefern von statischen Ressourcen sowieso schon fertig eingebaut hat. Ich denke da an die Wiederaufnahme von abgebrochenen Downloads, Range-Requests und so'n Zeug.

Und PHP-Scripts haben ein Ausführungszeit-Limit. Jetzt denke man sich noch ein Script dazu, welches abgebrochene Downloads nicht wieder aufnehmen kann. Jedesmal wenn der Client versucht, den abgebrochenen Download fortzusetzen, liefert das Script fröhlich die WMV-Datei neu von Anfang aus (und bricht dann unvermittelt ab). So sorgt man bei zahlenden Benutzern (bspw. mit schmalbandigem Zugang) ganz schnell für Frustration: Geld weg, Download unvollständig.

Es gibt für die in deiner Branche einschlägigen Webserver (wie Lighttpd (http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModSecDownload) oder nginx (http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/)) Lösungen, mit denen der Zugriff beim Download reguliert werden kann, ohne ein serverseitiges Script zwischenzuschalten.

Für den Apachen kannst du dir soetwas mit mod_access und mod_rewrite prima selber basteln. Ein Beispiel (allerdings mit Python-Script) gibts hier:
Secure Downloads with apache + mod_rewrite :: Lakin Wecker (http://lakin.weckers.net/code/web/apache-mod-rewrite-secure-downloads/)

Ansonsten empfehle ich das Studium der Apache-Dokumentation, und zwar speziell in den folgenden Abschnitten:

Authentication, Authorization and Access Control - Apache HTTP Server (http://httpd.apache.org/docs/2.0/howto/auth.html)
mod_access - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_access.html)
mod_auth - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_auth.html)
mod_auth_dbm - Apache HTTP Server (http://httpd.apache.org/docs/2.0/mod/mod_auth_dbm.html)


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:21 Uhr.