Hilfe zu Register Globals
Bei Register Globals handelt es sich um ein sicherheitskritisches Feature von PHP, welches aktiviert das Überschreiben von
Variablen von ausserhalb (z.B. per GET Parameter in der URL) zulässt. Leider ist dieses Feature bei vielen Webservern
aus kompatibilitätsgründen zu alter Software aktiviert. Und das, obwohl Register globals seit PHP 4.2.0 standardmäßig
deaktiviert ist und ab PHP 6 abgeschafft werden soll.
Das Expblog(und viele andere Content Management Systeme) benötigen zum einwandfreien Betrieb deaktiviertes Register Globals,
sprich die php.ini Einstellung register_globals off. Ohne diese Abschaltung ist der Betrieb meistens leider nicht möglich.
Sofern Ihr Webspace das in der Grundkonfiguration nicht zur Verfügung stellt, haben Sie mehrere Möglichkeiten dieses nachträglich
zu ändern. Allerdings ist zu beachten, daß nicht alle Webhoster Ihren Kunden erlauben diese Einstellung zu verändern. Im
Zweifelsfall sollte also der Support des Webhosters zu Rate gezogen werden.
Möglichkeiten zur Änderung des Register Globals Wertes:
- Möglichkeit 1: Die .htaccess Datei (empfohlen)
- Möglichkeit 2: php.ini im Verzeichnis
- Möglichkeit 3: PHP Funktion ini_set()
- Möglichkeit 4: Eigene PHP Methode
Wichtig:
- Die typische Fehlermeldung im Expblog bei aktiviertem Register Globals ist Warning:
"Illegal offset type in ../blog/admin/header.php on line..." beim Aufruf des ACP's. - Die nachfolgenden Änderungen wirken sich ausschliesslich auf das Blogverzeichnis aus.
Möglichkeit 1 : Die .htaccess Datei
Dieses ist die gängigste Methode um Register Globals zu deaktivieren und sollte daher bevorzugt werden. Bitte beachten Sie
das einige Serverkonfigurationen die .htaccess Datei periodisch einlesen. Haben Sie daher ein wenig Geduld falls die Änderung
nicht unmittelbar greift.
Ändern Sie in der Datei .htaccess (liegt im Hauptverzeichnis des Blogs) folgenden Eintrag:
#php_value register_globals 0
in
php_value register_globals 0
oder
php_flag register_globals off
Hier sind, abhängig von der Serverkonfiguration, mehrere Versionen möglich. Testen Sie ggf. alle durch!
Loggen Sie sich danach neu in den Administrationsbereich ein. Sollte die Fehlermeldung Warning: "Illegal offset type in
../blog/admin/header.php on line..." verschwunden sein, war die Änderung erfolgreich.
Möglichkeit 2 : php.ini im Blogverzeichnis
Wenn über die Codeänderung in der Datei .htaccess Register Globals nicht deaktiviert werden konnte, gibt es weitere
Möglichkeiten Register Globals zu deaktiveren:
Erstellen Sie eine Datei mit dem Namen php.ini und folgendem Inhalt:
register_globals=off
Dabei gilt es zu beachten, dass manche Server anders mit der php.ini Datei umgehen: Ggf. muss die Datei in jeden
Ordner kopiert werden der Skripte beinhaltet, die ausgeschaltete Register Globals brauchen. In anderen Fällen reicht es
die Datei nur in das Hauptverzeichnis des Webspaces hochzuladen.
Möglichkeit 3 : ini_set() (nur bis Expblog 0.4.5 möglich)
Über den PHP-Befehl
ini_set("register_globals","off");
kann ebenfalls versucht werden, Register Globals auszuschalten. Der Befehl sollte am besten in die Datei pre_header.php
(liegt im include Ordner) und vor allem in die Datei header.php (liegt im admin Ordner) eingefügt werden.
Ändern Sie dazu folgende Zeile in der Datei pre_header.php
include "admin/classes/rss.class.php";
in
include "admin/classes/rss.class.php";
//____________________________________________________________________________________________
//
// Register Globals ausschalten
//____________________________________________________________________________________________
ini_set("register_globals","off");
um.
Und ändern Sie folgende Zeile in der Datei pre_header.php
error_reporting(E_ALL);
in
error_reporting(E_ALL);
// Register Globals ausschalten
ini_set("register_globals","off");
um.
Möglichkeit 4 : Änderung über eine eigene PHP Methode (nur für versierte Nutzer)
Zu guter letzt stelle ich hier noch eine "Fallback" Lösung zur Verfügung, welche ich allerdings
nur für den Fall empfehle, daß alle vorherigen Möglichkeiten gescheitert sind. Die Lösung
über PHP stellt einen Overhead dar, ist nicht empfehlenswert und sollte wirklich nur im Notfall Anwendung
finden.
/* public static */ function unregisterGLOBALS()
{
if(ini_get('register_globals'))
{
if(isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS']))
{
// die('FATAL::GLOBALS overwrite attempt detected. Your IP has been logged.');
}
$noUnset = array(
'GLOBALS',
'_GET',
'_POST',
'_COOKIE',
'_REQUEST',
'_SERVER',
'_ENV',
'_FILES'
);
$input = array_merge(
$_GET,
$_POST,
$_COOKIE,
$_SERVER,
$_ENV,
$_FILES,
isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()
);
foreach($input as $x => $y)
{
if(!in_array($x, $noUnset) && isset($GLOBALS[$x]))
{
unset($GLOBALS[$x]);
}
}
}
}
Klar sollte sein, daß diese Methode möglichst weit Oben im Script aufzurufen ist..
Demoblog
Zum Testen des Blogs steht eine Online Demo zur Verfügung. So können Sie das
Expblog vor dem Download auf Herz und Nieren prüfen.
Benutzername: demo
Passwort: demo
Anleitungen & Tutorials
- Installationsanleitung
- Hilfe zum Updaten
- Hilfe zu Mod Rewrite
- Demoplugin für die Seitenleiste
- PHP für Einsteiger

