Gibt es eine Möglichkeit, zu verhindern, dass ein Benutzer eine Datei anzeigt, sie aber trotzdem als Bestandteil einer anderen Datei in PHP ?
Dies funktioniert nicht, wenn der eingeschlossene Dateiname denselben Namen hat wie der globale.
Gibt es eine Möglichkeit, zu verhindern, dass ein Benutzer eine Datei anzeigt, sie aber trotzdem als Bestandteil einer anderen Datei in PHP ?
Wenn Sie verhindern wollen, dass sie jemals angezeigt wird, wenn sie nicht enthalten ist, gibt es einen automatisierten Weg.
if (basename(__FILE__) == basename($_SERVER['PHP_SELF'])) header("HTTP/1.0 404 Not Found");
Auf diese Weise funktioniert es auch dann, wenn Sie den Dateinamen ändern oder ähnliches.
Es gibt viele gute Antworten in diesem Thread - hier ist eine, die noch nicht erwähnt wurde.
Sie können Ihre eingebundenen PHP-Dateien mit einem i
in der Erweiterung, z.B. someincludedfile.phpi
und konfigurieren Sie dann Apache so, dass er keine phpi
Dateien. Voilà.
Nachteile:
Vorteile:
Ich persönlich würde die Dateien lieber in ein Verzeichnis außerhalb des Dokumentenstamms verschieben, aber wenn Sie eine große Legacy-Anwendung haben, könnte dies schneller zu ändern sein.
Link: http://www.ducea.com/2006/07/21/apache-tips-tricks-deny-access-to-certain-file-types/
Nur um die Lösungen mit $_SERVER
Variablen - unten ist eine kleine .php-Datei, und in den Kommentaren ist eine Kopie einer bash
Test, den ich unter Ubuntu durchgeführt habe; der Punkt ist, dass sich diese Variablen je nach Art des Zugriffs und je nachdem, ob Symlinks verwendet werden, ziemlich stark ändern können ( Beachten Sie auch, dass ich im untenstehenden Code das ' <code>?\></code> ' in der echo-Anweisung, sonst bricht die Syntaxfarbe; entfernen Sie den Backslash, wenn Sie den Code versuchen ) :
<?php
function report($label, $value) {
printf ("%23s: %s\n", $label, $value);
}
report("DOCUMENT_ROOT.PHP_SELF", $_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'] );
report("SCRIPT_FILENAME", $_SERVER['SCRIPT_FILENAME'] );
report("__FILE__", __FILE__ );
report("PHP_SAPI", PHP_SAPI );
/*
# the test (bash):
home~$ mkdir /tmp/ptest
home~$ cd /tmp/ptest/
ptest$ ln -s /real/path/to/varcheck.php .
ptest$ echo '<? require_once "varcheck.php"; ?\>' > varcheckincl.php
# ... and in a separate terminal, run
# php (>5.4) cli server at same (/tmp/ptest) location:
ptest$ php-5.4.10 -S localhost:8000
# back to first terminal, the test - and output:
ptest$ php varcheck.php
DOCUMENT_ROOT.PHP_SELF: varcheck.php
SCRIPT_FILENAME: varcheck.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ php -r 'require_once "varcheck.php";'
DOCUMENT_ROOT.PHP_SELF: -
SCRIPT_FILENAME:
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ php varcheckincl.php
DOCUMENT_ROOT.PHP_SELF: varcheckincl.php
SCRIPT_FILENAME: varcheckincl.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ wget http://localhost:8000/varcheck.php -q -O -
DOCUMENT_ROOT.PHP_SELF: /tmp/ptest/varcheck.php
SCRIPT_FILENAME: /tmp/ptest/varcheck.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli-server
ptest$ wget http://localhost:8000/varcheckincl.php -q -O -
DOCUMENT_ROOT.PHP_SELF: /tmp/ptest/varcheckincl.php
SCRIPT_FILENAME: /tmp/ptest/varcheckincl.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli-server
*/
?>
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.