| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

27-06-2005, 11:55
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
PDF-Files schützen
Hallo Leute,
bei uns wurde ein User-Verwaltungssysten für einen Kurs mit Hilfe von PHP und Postgresql erstellt.
Beim Anlegen von neuen Usern werden diese in einer Tabelle angelegt und die Passwörter werden mit Hilfe von md5() verschlüsselt.
Nun möchte ich aber den Zugriff auf die PDF-Dateien, welche in einem separaten Ordner innerhalb des Kurses liegen nur dann freigeben, wenn der User sich diese auch ansehen darf.
Habe das bisher so gemacht, dass die Links zu dem PDF-Dateien nur angezeigt werden, wenn das entsprechende Flag in der Tabelle dafür gesetzt worden ist.
Wenn die Leute allerdings die URL zu den PDF-Files haben, können sie diese allerdings direkt aufrufen.
Wie kann ich das verhindern?
Eine Möglichkeit wäre natürlich den Ordner, welcher die PDF-Dateien enthält mit ner .htaccess zu schützen, aber ich glaube nicht, dass dies in diesem Fall funktioniert...
Hat jemand ne Idee?
THX
Martin
|

27-06-2005, 12:15
|
|
zyrano
Newbie
|
|
Registriert seit: Apr 2005
Beiträge: 16
|
|
Was sind das für PDF-Dokumente?
Wäre es denkbar diese erst zur Laufzeit, sprich in PHP
selber zu erstellen? Dann bräuchtest Du diese nicht auf dem
Server direkt ablegen und keiner käme mit einem
"Direkt-Link" dran.
|

27-06-2005, 12:23
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
Die PDF-Dokumente enthalten die Teile des Kurses.
Es ist sozusagen eine Druckversion des Online-Kurses!
Wie funktioniert das denn mit den PDF-Files, wenn man diese durch PHP erstellen lässt?
Wenn der User das Flag hat, dass er sich diese PDF-Files anschauen kann, dann sieht er auch die entsprechenden Links in dem Fenster.
Wie würde das denn dann funktionieren?
Immerhin werden diese Links durch <a href...> dargestellt. und da müsste man doch nen statische Adresse angeben, oder?!
|

27-06-2005, 12:29
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Re: PDF-Files schützen
Zitat:
Original geschrieben von vindiesel
Eine Möglichkeit wäre natürlich den Ordner, welcher die PDF-Dateien enthält mit ner .htaccess zu schützen, aber ich glaube nicht, dass dies in diesem Fall funktioniert...
|
Warum sollte das nicht funktionieren?
Um dir die Pflege der .htaccess/.htpasswd zu sparen, könntest du jeden Request auf eine .pdf auf eine download.php?file={requested_pdf} weiterleiten (mod_rewrite).
Die download.php ...
- check_user();
- header('pdf-download-header');
- readfile($requested_pdf);
|

27-06-2005, 12:36
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
@onemorenerd
Geht das auch etwas ausführlicher?
Habe nämlich in php bisher nicht wirklich viel gemacht und kann daher mit deinem Vorschlag nicht so viel anfangen!
|

27-06-2005, 12:51
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Natürlich gibts den Tipp auch in XL, aber ohne alles vorzukauen.
Ausgangslage: Alle PDFs in einem Verzeichnis.
Schritt 1: In dem Verzeichnis eine download.php erstellen, die folgendes macht:
- den User überprüfen, so wie du es sonst auch machst (mit Session oder oder)
- prüfen ob mit GET etwas übergeben wurde
- prüfen ob es ein entsprechendes PDF gibt
- mit header() dem Browser klarmachen, das jetzt ein PDF kommt
- mit readfile() das PDF an den Browser weiterreichen
Schritt 2: In dem Verzeichnis eine .htaccess erstellen:
- mit mod_rewrite alles was (.+\.pdf) heißt auf download.php?pdf=$1 umschreiben
Effekt: User klickt auf Link foo.pdf, .htaccess bewirkt Ausführung von download.php?pdf=foo.pdf, User bekommt foo.pdf - wenn er authorisiert ist.
Geändert von onemorenerd (27-06-2005 um 12:53 Uhr)
|

27-06-2005, 20:12
|
|
ExInfernis
Junior Member
|
|
Registriert seit: Jan 2004
Ort: Berlin
Beiträge: 213
|
|
Ha, das hat ja mal gepasst.
Hab heute auch nach einer Möglichkeit gesucht meine pdf-Files zu schützen und obiges gleich mal angewandt, läuft einwandfrei!!!
|

28-06-2005, 10:46
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
@ExInfernis
Kannst du bitte mal den Inhalt deiner .htaccess posten?
Bei mir hakts an dieser Stelle leider noch...
|

29-06-2005, 04:53
|
|
ExInfernis
Junior Member
|
|
Registriert seit: Jan 2004
Ort: Berlin
Beiträge: 213
|
|
Sorry, hat ein wenig gedauert:
Zitat:
RewriteEngine On
#Alle Anfragen fuer .pdf Dateien wird an download.php umgeleitet
RewriteRule ^(.+\.pdf)$ download.php?downid=$1
|
|

29-06-2005, 08:48
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
Hmmm....merkwürdig!
Bei mir steht folgendes:
RewriteRule ^(.+\.pdf)$ download.php?pdf=$1
Bekomme allerdings jedesmal folgende Fehlermeldung:
Fehler
Sie haben versucht auf die Seite www.xyz.de/blabla/PDF/download.php zuzugreifen
Diese Seite nicht vorhanden oder Sie haben keine Erlaubnis auf diese Seite zuzugreifen.
Ohne .htaccess gibts keinen Stess, aber dann kann sich ja jeder die pdf-files anschauen!
Die download.php und htaccess liegen im selben Verzeichnis wie die pdf-files -> www.xyz.de/blabla/PDF/
Wenn ich die download.php in ein anderes Verzeichnis kopiere, dann findet er die pdf-datei nicht mehr, obwohl ich den Pfad angepasst habe!
Jemand ne Idee?
Geändert von vindiesel (29-06-2005 um 10:45 Uhr)
|

29-06-2005, 11:30
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ein / vor download.php in der .htaccess und er sucht www.xyz.de/download.php, ein /blabla/download.php und er sucht www.xyz.de/blabla/download.php, ganz ohne / sucht er im aktuellen Verzeichnis.
|

29-06-2005, 13:46
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
Funzt leider irgendwie nicht!
Ich poste jetzt mal die Inhalte der einzelnen Dateien:
*********************************************
Inhalt download.php
Zitat:
<?php
//start the session
session_start();
//check to make sure the session variable is registered
if(!isset($_SESSION["username"])): header("Location: login.html"); endif;
// Hier werden die Parameter für das Einloggen in die Datenbank festgelegt
include "datenbank.inc.php";
//Die Verbindung zur Datenbank herstellen
$db = pg_connect("host=$dbHost port=$port dbname=$dbName user=$dbUser password=$dbPass") or die ("Die Verbindung zur Datenbank konnte nicht hergestellt werden!");
$query = "SELECT * FROM users WHERE username='$username';";
$result = pg_Exec($db, $query);
$row1 = pg_Fetch_Row($result);
//Die User-ID herausfinden
$anfrage2 = "SELECT user_id FROM users WHERE username='$username';";
$result2 = pg_exec($db, $anfrage2);
$row = pg_Fetch_Row($result2);
$id = $row[0];
$anfrage = "SELECT * FROM zugriffsrechte WHERE user_id='$id';";
$ergebnis = pg_Exec($db, $anfrage);
$row2 = pg_Fetch_Row($ergebnis);
pg_close($db);
if ($row2[7] == 1)
{
$dateiname = $_GET['pdf'];
if(file_exists($dateiname))
{
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=\"$dateiname\"");
readfile($dateiname);
}
else
{
echo "DIE DATEI $dateiname IST NICHT VORHANDEN!";
}
}
else
echo 'KEINE BERECHTIGUNG!';
?>
|
***********************************************
Inhalt .htaccess
Zitat:
RewriteEngine On
#Alle Anfragen fuer .pdf Dateien wird an download.php umgeleitet
RewriteRule ^(.+\.pdf)$ download.php?pdf=$1
|
***********************************************
Inhalt drucken.php
<a href="../../download.php?pdf=modul_1.pdf" target="_new">KLICK MICH</a>
***********************************************
Position der einzelnen Dateien:
download.php -> http://www.xyz.de/blabla/
.htaccess -> http://www.xyz.de/blabla/PDF/
pdf-files -> http://www.xyz.de/blabla/PDF/
drucken.php -> http://www.xyz.de/blabla/Navigation/Drucken/
|

29-06-2005, 14:56
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
download.php -> http://www.xyz.de/blabla/
.htaccess -> http://www.xyz.de/blabla/PDF/
|
Wenn die .htaccess greift, dann weil ein Zugriff auf 'ihr' Verzeichnis erfolgen soll, zum Beispiel auf irgendein.pdf.
Die RewriteRule schreibt den Request nun um auf eine download.php IM SELBEN VERZEICHNIS, also auf http://www.xyz.de/blabla/PDF/download.php! Das ist falsch.
Machs so:
RewriteRule ^(.+\.pdf)$ http://www.xyz.de/blabla/download.php?pdf=$1
|

29-06-2005, 15:02
|
|
vindiesel
Newbie
|
|
Registriert seit: Jun 2005
Beiträge: 20
|
|
Ok, habs nun geändert!
Beim Aufruf der pdf-datei über den Link der drucken.php kommt jedesmal folgende Meldung:
DIE DATEI modul_1.pdf IST NICHT VORHANDEN!
Wieso findet er die Datei nicht?
Geändert von vindiesel (29-06-2005 um 15:04 Uhr)
|

29-06-2005, 15:44
|
|
ExInfernis
Junior Member
|
|
Registriert seit: Jan 2004
Ort: Berlin
Beiträge: 213
|
|
Probier mal statt ../../drucken ... den absoluten Pfad anzugeben!
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|