PHP-Sicherheit - Externes includen verbieten

PHP-Fan

Erfahrenes Mitglied
Hallo,

ich möchte gerne, dass das includen nur auf meinem Server möglich ist. Funktionieren tut das schon ein Kollege hatte das mal gemacht. Weiß aber nicht mehr wie das geht. Das stellt nämlich leder ein enormes Sicherheitsrisiko da.

Diesen Code verwende ich!

PHP:
<?
$site = (isset ($_REQUEST['site'])) ? $_REQUEST['site'] : '';
$host=$_SERVER['HTTP_HOST'];

if($site=="") {
// News System Include

include("http://$host/main.php?open=news");

}
  else {
			include($site);
}
?>

Und

PHP:
<?
require("http://$host/main.php?open=newest5"); 

?>

Ich hoffe Ihr könnt mir helfen!
 
Erstmal: include() und require() koennen, genauso wie einige andere Funktionen, nur mit URLs umgehen wenn allow_url_fopen=on ist. Da man darauf nicht zwingend Einfluss hat und diese Einstellung gewaltige Sicherheitsloecher aufreissen kann sollte man immer so programmieren, dass die Script auch mit allow_url_fopen=off laufen. Soll heissen: Keine Remote-Includes. Und falls es wirklich noetig sein sollte Code von anderen Server zu holen um ihn auszufuehren, dann sollte diese Addresse fest im Quellcode eingetragen sein und nicht uebergeben werden. Dann kannst Du ueber fsockopen() verbinden und darueber die Daten abholen. Ansonsten gilt halt: Nur ueber's Dateisystem includen.
 
Wenn allow_url_fopen=off ist wirst Du mit fsockopen() arbeiten muessen. Alternativ kannst Du, falls verfuegbar, mit CURL arbeiten. Aber dies ist "in the wild" wohl eher selten zu finden. Oder falls Du FTP-Zugriff hast kannst Du, falls verfuegbar, mit den FTP-Funktionen arbeiten, oder eben eine FTP-Verbindung ueber fsockopen() aufbauen.
Allgemein wuerde ich da, wenn es denn halt wirklich noetig ist, auf fsockopen(), bzw. meine Klassen fuer HTTP- oder FTP-Zugriff, setzen.

Bei Remote-Includes ist eh das Problem, dass sie in der Regel nicht auf Deinem Server ausgefuehrt werden da Du ja bei einem Zugriff per HTTP nur den URL aufrufst und somit das Script auf dem Server ausgefuehrt wird, es sei denn Dir wird dort einfach nur der Quellcode praesentiert.

Uebrigens, ein kleiner Blick in mein Tutorial Schutz vor includen von Dateien ausserhalb des DocRoot koennte vielleicht auch nicht uninteressant fuer Dich sein.
 
Zurück