PHP Medien auf Website schützen

Grapholion

Lt. Junior Grade Pro
🎅Rätsel-Elite ’12
Registriert
Mai 2006
Beiträge
322
Hi Leute,

hab mal ne Frage an euch. Habe eine Testseite mit Login-Bereich. Nun will ich, dass auf meine Bilder und Videos nur in diesem Bereich zugegriffen werden kann. Damit meine ich z.B. www.xzy.org/titelbild.jpg oder www.xzy.de/lustige-tiere.mp4.
Auf diese Dateien kann man ja direkt zugreifen, ich will aber den Zugriff nur serverseitig steuern. Gibt es da eine möglichkeit?

Gruß
Graph
 
Du kannst per .htaccess-Datei den direkten Zugriff auf ein Medium verbieten und stattdessen eine extra "PHP-Seite" erstellen, welche dann ihre Sachen (Rechte etc.) prüft und die gewünschte Datei ausliefert.
 
OK klingt schonmal super :) benutze apache2 auf einer Ubuntu-Distro. Kann ich die .htaccess einfach im www/html Verzeichnis erstellen und Rechte übergeben?
 
sorg dafür, dass die datein nicht im public verfügbar sind..

dann einfach per php ausgeben falls der user eingeloggt ist
PHP:
<?php

if ($userIsLoggedIn) {
    header('Content-type: image/jpeg')
    readfile('path/to/titelbild.jpg');
} else {
    die('nope')
}

nur ein beispiel
 
Die Variante von kling1 würde auch funktionieren, dann brauchste keine htaccess. Musst eben die Dateien außerhalb der Pfadstruktur der Website ablegen.

Eine htaccess-Datei kannst du im root-Verzeichnis der Seite ablegen (in deinem Fall www/html), aber auch z. B. in einem beliebigen Unterordner, in dem die Media-Dateien liegen.
 
Ja die Variante ohne htaccess klingt gut. Habe jetzt ne bild.php erstellt mit der Verlinkung auf die Datei ausserhalb des apache Root-Ordners. Ich habe diese auf meiner Seite an der Stelle mit include eingebunden wo ich sie haben wollte. Jetzt habe ich das Problem, dass das Bild nicht angezeigt wird und nach dem include nichts mehr auf die Seite geladen wird.

Code:
<?php
include "../mysql.php";
if ($check==False){
header("Location: http://www.xzy.de/");
}
?>
<html>
<head>
<title>Urlaubsfotos</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../source/index.css" />
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
</head>
<body> <h1 id="ueberschrift">
Fotos </h1> <br> <ul id="menue">
<?php
echo "<li><a href='http://xzy.de/index.php?abfrage=<?=$check>'>Home</a></li>";
echo "<li><a href='http://xzy.de/impressum/index.php?abfrage=<?=$check>'>Impress$
?>
<li id="aktiv">Galerie</li>
</ul>
<script>
$( function() {
$( "#videos" ).accordion();
});
</script>
<br>
<p id="ueberschrift2">Urlaubsvideos</p>
<div id="videos">
<h3 id="urlaub_spanien"> Barcelona (2016)</h3>
<div>
<div id="uebersicht">
<?php
include('bild.php');
?>
</div>
</div>
<h3 id="ueberschrift2"> Prag (2013) </h3>
<div>
<div id="uebersicht_prag">

</div>
</div>
</div>
</body>
</html>
 
Zuletzt bearbeitet:
kling1 schrieb:
sorg dafür, dass die datein nicht im public verfügbar sind..

dann einfach per php ausgeben falls der user eingeloggt ist
PHP:
<?php

if ($userIsLoggedIn) {
    header('Content-type: image/jpeg')
    readfile('path/to/titelbild.jpg');
} else {
    die('nope')
}

nur ein beispiel

nachteil: ist der download (insb. fuer mp4) laenger als die max execution time, terminiert der webserver den download.
 
Ok verstehe. Habe nun die Variante mit .htaccess durchgeführt. Habe es über die config Datei des Apache geschafft Ordner auszusperren, wenn ich "www.beispiel.de/images" eintipp bekomme ich einen forbidden 403, was auch ganz gut ist, jedoch wenn ich auf einzelne Dateien innerhalb des Ordners zugreife "www.beispiel.de/images/01.jpg" dann wird mir das Bild angezeigt.

Dadurch finde ich es Unsinn den Ordner zu sperren wenn die einzelnen Dateien trotzdem erreichbar sind. Will ja da Bild zwar auf der Homepage anzeigen, jedoch nicht den Pfad freigeben.
 
Du sollst ja auch nicht den Ordner sperren, sondern du kannst in den Ordner eine .htaccess-Datei legen, mit der du den Zugriff auf die Dateien sperrst. Kommt eben drauf an, was man erreichen will.

Man kann die htaccess auch in den Web-Root legen, aber dann wirkt die eben überall. Wenn man z. B. nur bestimmte jpg-Dateien aussperren will, aber andere jpg-Dateien frei zugänglich sein sollen (z. B. Seitenlogo usw.), dann ist es sinnvoller, die Datei in einen Unterordner zu packen.

Du solltest dich erstmal gründlichst mit der Arbeitsweise und den Möglichkeiten von htaccess vertraut machen, bevor du damit irgendwas zusammenfrickelst.
 
Zurück
Oben