Code richtig? geht nicht :(

Original geschrieben von pornex
ich bleibe dann gleich mal hier im Thread....

Ich benutze nie die Superglobalen Variablen alà _GET['BLA']... worin liegt der unterschied zwischen

$_GET[$inputname] und $inputname?

Ganz einfach. Globale Variablen sind zu vermeiden. Grund ist die schlechte Überprüfbarkeit.
Es ist auch nicht weiter überprüfbar ob die Variable per GET oder per POST übermittelt wurde.
Zudem eröffnet es dir die möglichkeiten über GET bzw POST varialben zu iterieren, was mit Register Globals = on nicht möglich ist.
Ebenso ist es eine Möglichkeit Scripte von ausserhalb zu manipolieren. Ein geschickter Angreifer hat bei schlechter Überprüfung als Beispiel die möglichkeit die Variable $sql so umzuschreiben das das Query anstatt die Buchliste, die Benutzer incl. Passwoerter auf der Webseite anzeigt.

z.b ein Include

index.php
Code:
   $sql = "select * from Buchliste";
   // noch weiterer Code
   include("buchshow.php");

buchshow.php
Code:
   mysql_query($sql) 
   .... // ausgabe

Ein Angreifer ruft dann buchshow.php direkt mit http://www.beispiel.de/buchshow.php?sql=select * from passwoerter
auf, und bekommt das was ihn interressiert gezeigt.

Das ist nur ein Exploit der Sicherheitslücke die mir auf die Schnelle eingefallen ist. Mit ein bischen Mühe und Geduld (Angreifer haben Geduld) laesst sich ein noch viel groesserer Aerger heraufbeschwoeren.
Darum die eigenen Lokalen Variablen schützen und niemals Register Globals = on verwenden.

Zudem ist der neue PHP Standard auf Register Globals = off ausgelegt, und die meisten Hoster halten sich Gottseidank daran.

Original geschrieben von pornex

ich benutz das nämlich immer, wenn ihr mir nämlich jetzt ne gute Begründung liefert steige ich wohl um. Deshalb wär ich da ma dankbar...
Ich hoffe meine Begründung reicht dir. Wenn nicht es gibt massenhafte Exploits die genau diesen Fehler bei PHP ausgenutzt haben. Die sind über google auffindbar.

Original geschrieben von pornex

und das mit isset, oke, aber wenn ich jetzt nicht mit false/true Übergaben als Variablenwert arbeite dann ist es doch egal!

Nein ist nicht egal. Wenn du auf einen Variablenwert überprüfst dann überprüfe auf einen Variablen - Wert.
Genauso lese ich auch ein Script. Wenn du auf das vorhandensein einer Variable prüfen willst, dann prüfe darauf. Und dafür existiert isset.
Gewöhn dir das auch bei integer oder auch String variablen an. Denn du schaffst dir sonst nur eine Fehlerquelle.
Zumal auch Arrays da dich aus dem Konzept bringen können. Existiert ein Array wenn
mann das letzte Element rauspopt?

Original geschrieben von benutzername

was soll ich nun machen? habe einiges zahlreiche tutorials und manuals gelesen und mein WAMP ( bin ich mir sicher ) ist ordentlich eingerichtet.

sorry, das ich das thema wieder auf mein problem lenke, auch wenn syntax diskussionen vielleicht wichtig sind, jedoch sollte das mein problem nicht lösen. danke ;)
Wir reden u.a um genau dein Problem. Die Umstellung von Register Globals auf off.
Ich habe da ein kurzes Beispiel gegeben wie du dein Script versionsunabhängig gestalltest.

Code:
if(isset($_GET)==false) {
$_GET = $HTTP_GET_VARS;
}
if(isset($_POST)==false) {
$_POST = $HTTP_POST_VARS;
}
 
Zurück