Aufrufschutz mit .htaccess und PHP
bearbeitet von Regina Schaukrug~~~
RewriteEngine on
RewriteRule (.*)\.pdf$ https://pfad_zur_pruefdatei.php?dt=$1`
~~~
> Die PHP-Datei sind (gekürzt) so aus:
~~~PHP
<?php
session_start();
if(is_numeric($_SESSION['uid']) && $_SESSION['uid']>0) { # Benutzer eingeloggt
$uid = $_SESSION['uid'];
if(isset($_GET['dt']) && $_GET['dt']!='') { # Aufruf via Direkturl auf die PDF (alte Links)
$datei = $_GET['dt'];
header('Content-Type: application/pdf');
readfile("absoluter_pfad_zur_pdf/".$datei);
}
} else { # Kein aktiver Login
header("Location:loginseite.php");
}
?>
~~~
> Mein Problem ist nun, das die PHP angesprochen wird, aber die PDF eine 0-byte-Datei ist, d.h. keine Ausgabe.
Vermutlich ist an `readfile("absoluter_pfad_zur_pdf/".$datei);` etwas falsch. Da es der Befehl nicht ist, bleibt der Parameter. Es kann aber ebenso sein, dass der Webserver die Datei nicht lesen darf. (`chmod 644 <DATEI>` oder `chmod a+r <DATEI>`) könnte helfen.
Das Error-Log sollte Dir mehr sagen. Ebenso kannst Du das Error-Reporting anschalten:
~~~php
error_reporting(E_ALL);
ini_set("display_errors", 1);
~~~
und mit den Entwicklertools Deines Browsers den Quelltext der Antwort ansehen.
**Warnungen:**
1.)
Außerdem solltest Du auf das `?>` am Ende verzichten, weil sonst womöglich nicht nur "hyperliquide" sondern unwillkommene Leerzeichen und Zeilenumbrüche gesendet werden. Wie die verschiedenen "PDF-Anzeiger" damit umgehen ist unklar, das kann zu Fehlermeldungen statt zur Anzeige führen.
2.)
**Ich sehe nichts, was verhindert, das ggf. Dateien abgeholt werden, die in anderen als dem gewünschtem Verzeichnis liegen. Das ist gefährlich!**
**Hinweise:**
Ich würde noch folgende Header senden:
~~~php
header( 'Content-Disposition: attachment; filename=' . $filename );
header( 'Content-Transfer-Encoding: binary' );
header( 'Content-Length: ' . filesize( $file ) );
~~~
Aufrufschutz mit .htaccess und PHP
bearbeitet von Regina Schaukrug~~~
RewriteEngine on
RewriteRule (.*)\.pdf$ https://pfad_zur_pruefdatei.php?dt=$1`
~~~
> Die PHP-Datei sind (gekürzt) so aus:
~~~PHP
<?php
session_start();
if(is_numeric($_SESSION['uid']) && $_SESSION['uid']>0) { # Benutzer eingeloggt
$uid = $_SESSION['uid'];
if(isset($_GET['dt']) && $_GET['dt']!='') { # Aufruf via Direkturl auf die PDF (alte Links)
$datei = $_GET['dt'];
header('Content-Type: application/pdf');
readfile("absoluter_pfad_zur_pdf/".$datei);
}
} else { # Kein aktiver Login
header("Location:loginseite.php");
}
?>
~~~
> Mein Problem ist nun, das die PHP angesprochen wird, aber die PDF eine 0-byte-Datei ist, d.h. keine Ausgabe.
Vermutlich ist an `readfile("absoluter_pfad_zur_pdf/".$datei);` etwas falsch. Da es der Befehl nicht ist, bleibt der Parameter. Es kann aber ebenso sein, dass der Webserver die Datei nicht lesen darf. (`chmod 644 <DATEI>` oder `chmod a+r <DATEI>`) könnte helfen.
Das Error-Log sollte Dir mehr sagen. Ebenso kannst Du das Error-Reporting anschalten:
~~~php
error_reporting(E_ALL);
ini_set("display_errors", 1);
~~~
und mit den Entwicklertools Deines Browsers den Quelltext der Antwort ansehen.
**Warnungen**
1.)
Außerdem solltest Du auf das `?>` am Ende verzichten, weil sonst womöglich nicht nur "hyperliquide" sondern unwillkommene Leerzeichen und Zeilenumbrüche gesendet werden. Wie die verschiedenen "PDF-Anzeiger" damit umgehen ist unklar, das kann zu Fehlermeldungen statt zur Anzeige führen.
2.)
**Ich sehe nichts, was verhindert, das ggf. Dateien abgeholt werden, die in anderen als dem gewünschtem Verzeichnis liegen. Das ist gefährlich!**
Aufrufschutz mit .htaccess und PHP
bearbeitet von Regina Schaukrug~~~
RewriteEngine on
RewriteRule (.*)\.pdf$ https://pfad_zur_pruefdatei.php?dt=$1`
~~~
> Die PHP-Datei sind (gekürzt) so aus:
~~~PHP
<?php
session_start();
if(is_numeric($_SESSION['uid']) && $_SESSION['uid']>0) { # Benutzer eingeloggt
$uid = $_SESSION['uid'];
if(isset($_GET['dt']) && $_GET['dt']!='') { # Aufruf via Direkturl auf die PDF (alte Links)
$datei = $_GET['dt'];
header('Content-Type: application/pdf');
readfile("absoluter_pfad_zur_pdf/".$datei);
}
} else { # Kein aktiver Login
header("Location:loginseite.php");
}
?>
~~~
> Mein Problem ist nun, das die PHP angesprochen wird, aber die PDF eine 0-byte-Datei ist, d.h. keine Ausgabe.
Vermutlich ist an `readfile("absoluter_pfad_zur_pdf/".$datei);` etwas falsch. Da es der Befehl nicht ist, bleibt der Parameter. Es kann aber ebenso sein, dass der Webserver die Datei nicht lesen darf. (`chmod 644 <DATEI>` oder `chmod a+r <DATEI>`) könnte helfen.
Das Error-Log sollte Dir mehr sagen. Ebenso kannst Du das Error-Reporting anschalten:
~~~php
error_reporting(E_ALL);
ini_set("display_errors", 1);
~~~
und mit den Entwicklertools Deines Browsers den Quelltext der Antwort ansehen.
**Warnungen**
1.)
Außerdem solltest Du auf das `?>` am Ende verzichten, weil sonst womöglich nicht nur "hyperliquide" sondern unwillkommene Leerzeichen und Zeilenumbrüche gesendet werden. Wie die verschiedenen "PDF-Anzeiger" damit umgehen ist unklar, das kann zu Fehlermeldungen statt zur Anzeige führen.
2.)
ich sehe nichts, was verhindert, das ggf. Dateien abgeholt werden, die in anderen als dem gewünschtem Verzeichnis liegen
Aufrufschutz mit .htaccess und PHP
bearbeitet von Regina Schaukrug~~~
RewriteEngine on
RewriteRule (.*)\.pdf$ https://pfad_zur_pruefdatei.php?dt=$1`
~~~
> Die PHP-Datei sind (gekürzt) so aus:
~~~PHP
<?php
session_start();
if(is_numeric($_SESSION['uid']) && $_SESSION['uid']>0) { # Benutzer eingeloggt
$uid = $_SESSION['uid'];
if(isset($_GET['dt']) && $_GET['dt']!='') { # Aufruf via Direkturl auf die PDF (alte Links)
$datei = $_GET['dt'];
header('Content-Type: application/pdf');
readfile("absoluter_pfad_zur_pdf/".$datei);
}
} else { # Kein aktiver Login
header("Location:loginseite.php");
}
?>
~~~
> Mein Problem ist nun, das die PHP angesprochen wird, aber die PDF eine 0-byte-Datei ist, d.h. keine Ausgabe.
Vermutlich ist an `readfile("absoluter_pfad_zur_pdf/".$datei);` etwas falsch. Da es der Befehl nicht ist, bleibt der Parameter. Es kann aber ebenso sein, dass der Webserver die Datei nicht lesen darf. (`chmod 644 <DATEI>` oder `chmod a+r <DATEI>`) könnte helfen.
Das Error-Log sollte Dir mehr sagen. Ebenso kannst Du das Error-Reorting anschalten:
~~~php
error_reporting(E_ALL);
ini_set("display_errors", 1);
~~~
und mit den Entwicklertools Deines Browsers den Quelltext der Antwort ansehen.
**Warnungen**
1.)
Außerdem solltest Du auf das `?>` am Ende verzichten, weil sonst womöglich nicht nur "hyperliquide" sondern unwillkommene Leerzeichen und Zeilenumbrüche gesendet werden. Wie die verschiedenen "PDF-Anzeiger" damit umgehen ist unklar, das kann zu Fehlermeldungen statt zur Anzeige führen.
2.)
ich sehe nichts, was verhindert, das ggf. Dateien abgeholt werden, die in anderen als dem gewünschtem Verzeichnis liegen
Aufrufschutz mit .htaccess und PHP
bearbeitet von Regina Schaukrug~~~
RewriteEngine on
RewriteRule (.*)\.pdf$ https://pfad_zur_pruefdatei.php?dt=$1`
~~~
> Die PHP-Datei sind (gekürzt) so aus:
~~~PHP
<?php
session_start();
if(is_numeric($_SESSION['uid']) && $_SESSION['uid']>0) { # Benutzer eingeloggt
$uid = $_SESSION['uid'];
if(isset($_GET['dt']) && $_GET['dt']!='') { # Aufruf via Direkturl auf die PDF (alte Links)
$datei = $_GET['dt'];
header('Content-Type: application/pdf');
readfile("absoluter_pfad_zur_pdf/".$datei);
}
} else { # Kein aktiver Login
header("Location:loginseite.php");
}
?>
~~~
> Mein Problem ist nun, das die PHP angesprochen wird, aber die PDF eine 0-byte-Datei ist, d.h. keine Ausgabe.
Vermutlich ist an `readfile("absoluter_pfad_zur_pdf/".$datei);` etwas falsch. Da es der Befehl nicht ist, bleibt der Parameter. Es kann aber ebenso sein, dass der Webserver die Datei nicht lesen darf. (`chmod 644 <DATEI>` oder `chmod a+r <DATEI>`) könnte helfen.
Das Error-Log sollte Dir mehr sagen.
Außerdem solltest Du auf das `?>` am Ende verzichten, weil sonst womöglich nicht nur "hyperliquide" sondern unwillkommene Leerzeichen und Zeilenumbrüche gesendet werden. Wie die verschiedenen "PDF-Anzeiger" damit umgehen ist unklar, das kann zu Fehlermeldungen statt zur Anzeige führen.