register_globals deaktivieren.
Rekire
- php
2 Tobias Kloth
2 Sven Rautenberg1 dedlfix
0 Rekire
Hi,
Es ist mir schon fast peinlich danach zu fragen, aber ich bekomme es nicht hin :(
Wenn ich es richtig verstanden habe gibt es 3 Methoden dafür:
ini_alter('register_globals', 'off')
"php_flag register_globals off
"register_globals off
"Die ersten beiden Varianten funktionieren bei mir komischerweise nicht und die php.ini kann man im normalfall ja nicht verändern, aus dem Grund suche ich nun hier Hilfe.
Danke vorraus.
Gruß,
Rekire
Hallo Rekire,
Es ist mir schon fast peinlich danach zu fragen, aber ich bekomme es nicht hin :(
Wenn ich es richtig verstanden habe gibt es 3 Methoden dafür:
Das sind die wichtigsten Methoden (wobei die Funktion ini_alter() lediglich ein Alias von ini_set() ist), ja[1] - allerdings ist register_globals laut Doku nur in PHP_INI_PERDIR änderbar, kann also in der php.ini, in der httpd.conf und in .htaccess-Dateien gesetzt werden, nicht aber in Scripten mit ini_set().
- htaccess mit "
php_flag register_globals off
"
Das sollte funktionieren - wenn du von deinem Provider aus .htaccess-Dateien verwenden darfst (die Sprachangabe für das lang-Attribut ist übrigens "apache", nicht "htaccess").
Grüße aus Nürnberg
Tobias
[1] es gibt noch die Möglichkeiten Registry (Windows), httpd.conf und php.ini im Verzeichnis (CGI-Version von PHP), aber die werden wohl er seltener verwendet (wobei die httpd.conf vielleicht von Providern zum setzen von open_basedir genutzt wird?)
Moin!
Wenn ich es richtig verstanden habe gibt es 3 Methoden dafür:
- Den PHP-Schnippel "
ini_alter('register_globals', 'off')
"
Funktioniert nicht. Zu dem Zeitpunkt, an dem das Skript startet, sind die globalen Variablen ja bereits belegt. Nachträglich löschen geht nicht, damit könnte man auch Variablen löschen, die vom Skript regulär benutzt werden (das Abschalten muß ja nicht zwingend als allererstes passieren).
- htaccess mit "
php_flag register_globals off
"
Funktioniert nur, wenn der Hoster sowas zuläßt.
- Die php.ini mit "
register_globals off
"
Funktioniert ganz sicher.
Kontaktiere deinen Provider. Der kann dir sicher helfen, beispielsweise indem er deinen Webspace auf einen anderen, passend konfigurierten Server verschiebt, oder indem er deinen Webspace lokal entsprechend konfiguriert, oder dir sagt, wie du das selbst machen kannst.
Wenn dein Provider dir nicht weiterhelfen kann, solltest du ihn wechseln.
- Sven Rautenberg
echo $begrüßung;
Wenn ich es richtig verstanden habe gibt es 3 Methoden dafür:
Nö.
- Den PHP-Schnippel "ini_alter('register_globals', 'off')"
Überleg doch mal, wann dieses Feature wirksam wird.
Es stellt die EGPCS-Variablen im Script zur Verfügung. Was soll denn geschehen, wenn man dieses Feature im Script (mehrmals) ein- und ausschalten könnte? Sollen die Variablen jedes Mal angelegt bzw. gelöscht werden?
Zu jeder Konfigurationseinstellung von PHP gibt es Aussage, wo diese Einstellungen vorgenommen werden. Du findest sie in den einzelnen Kapitel der verschiedenen Erweiterungen oder auch zusammengefasst im Anhang des Handbuchs: php.ini directives. Diese Aussage ist in der Spalte Changeable enthalten. Eine Erläuterung der Werte ist im Anschluss an die Liste zu finden.
Außerdem ist diese Information als Anmerkung in der Beschreibung zu register_globals zu finden.
- htaccess mit "php_flag register_globals off"
Die ersten beiden Varianten funktionieren bei mir komischerweise nicht
Vielleicht hat dein Provider das Einstellen in der .htaccess unterbunden, oder PHP läuft als CGI und nicht als Apache-Modul. Apache-Konfigurationen wirken sich nur auf Apache-Bestandteile (inklusive Module) aus. Ein vom Apachen aufgerufenes CGI-Programm bekommt davon im Allgemeinen nichts mit.
Bei der CGI-Variante ist es aber oft üblich, eine eigene php.ini in das Script-Verzeichnis legen zu können, welche dann berücksichtigt wird. Frage bitte dazu den Support deines Providers (oder dessen Support-Webseiten).
- Die php.ini mit "register_globals off"
Da fehlt ein = dazwischen.
und die php.ini kann man im normalfall ja nicht verändern, aus dem Grund suche ich nun hier Hilfe.
Im Normalfall? Du solltest nicht davon ausgehen, dass Webseitenhosting bei einem Provider der "Normalfall" für PHP-Installationen ist. :-)
echo "$verabschiedung $name";
Nochmals hi,
So wie ich eure drei Antworten verstehe geht mein vorhaben so einfach wohl nicht.
Nur wie läst sich dann dieses konkrete Problem umgehen:
<?
$_SESSION['Vorname']="Karl";
[...]
$row = mysql_fetch_row($result);
$Vorname=htmlentities($row[1]);
?>
Für mich sind das Zwei verschiedene Variablem aber meine Session Variable wird überschreiben.
Aufgrund der globalen Variablen leuchtet es mir begrenzt ein aber ich setze die Variable doch mit _SESSION.
Abgesehen davon die Variable umzubennen was habe ich für Optionen?
Gruß,
Rekire
echo $begrüßung;
So wie ich eure drei Antworten verstehe geht mein vorhaben so einfach wohl nicht.
Es ist nicht unmöglich. Die Frage ist, welche PHP-Version hast du (nebensächlich) und wie ist diese mit dem Apachen verbunden (Modul, CGI - phpinfo() gibt Auskunft)? Was sagt der Support des Providers zu diesem Thema?
Nur wie läst sich dann dieses konkrete Problem umgehen:
$_SESSION['Vorname']="Karl";
$Vorname=htmlentities($row[1]);
Für mich sind das Zwei verschiedene Variablem aber meine Session Variable wird überschreiben.
In Wirklichkeit ist $Vorname eine Referenz auf $_SESSION['Vorname']. Somit ändert ein Zugriff auf $Vorname auch $_SESSION['Vorname'].
Abgesehen davon die Variable umzubennen was habe ich für Optionen?
Lässt sich register_globals wirklich nicht ausschalten, könntest du am Script-Anfang die globalisierten Variablen bzw. die Referenzen zu Fuß löschen.
foreach ($_FOO as $key => $value)
unset($$key); // Variablenname wird aus dem Inhalt von $key gebildet (Variable Variablen)
unset($key, $value); // aufräumen (nicht unbedingt nötig)
wobei FOO stellvertretend für eines der EGPCS-Arrays steht. Der Inhalt von $_FOO bleibt dabei unberührt.
echo "$verabschiedung $name";
echo $begrüßung;
foreach ($_FOO as $key => $value)
unset($$key); // Variablenname wird aus dem Inhalt von $key gebildet (Variable Variablen)
Alternativ ginge auch:
unset($GLOBALS[$key]);
besonders dann, wenn diese Funktionalität in eine Funktion verlagert werden soll.
echo "$verabschiedung $name";
hi,
Lässt sich register_globals wirklich nicht ausschalten, könntest du am Script-Anfang die globalisierten Variablen bzw. die Referenzen zu Fuß löschen.
Ich denke nicht, dass das bzgl. des Problems hilft - $Vorname und $_SESSION['Vorname'] dürften nach wie vor das gleiche meinen.
gruß,
wahsaga
echo $begrüßung;
Lässt sich register_globals wirklich nicht ausschalten, könntest du am Script-Anfang die globalisierten Variablen bzw. die Referenzen zu Fuß löschen.
Ich denke nicht, dass das bzgl. des Problems hilft - $Vorname und $_SESSION['Vorname'] dürften nach wie vor das gleiche meinen.
$Vorname ist nach register_globals eine Referenz auf $_SESSION['Vorname'], so als ob man es so angelegt hätte:
$Vorname =& $_SESSION['Vorname'];
Das sieht man, wenn man var_dump($GLOBALS); ausgibt. Nach dem
unset($Vorname);
ist $Vorname weg, aber $_SESSION['Vorname'] immer noch vorhanden. Ein erneuter Schreibzugriff auf $Vorname stellt die Referenz nicht automatisch wieder her.
Siehe auch Unsetting References.
echo "$verabschiedung $name";