PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP - Zugriff auf nichtexistente Arrayelemente


Gast
2008-12-18, 01:10:56
Hallo,
ich hab mir jetzt mehrere Tutorials zu PHP angeschaut, weil ich eine kleine Webanwendung programmieren möchte. Dabei ist mir aufgefallen, dass bei Zugriff auf z.B. Formulareingaben immer die Funktion isset() benutzt wird. Bis jetzt hab ich einfach immer direkt auf die Variable zugegriffen, z.B. einfach
if(!$_POST['eingabe']) statt if(!isset($_POST['eingabe']. Funktionieren tut das auch ohne Probleme. Bekomme ich dadurch möglicherweise Probleme oder ist das eigentlich egal?

Genauso beim erstellen des Formulars über PHP, darf ich da einfach schreiben
echo '<input type="text" name="eingabe" value="' . $_POST['eingabe'] . '">'
oder muss ich vorher überprüfen ob die Variable überhaupt existiert?

Vielen Dank für eure Hilfe :)

Berni
2008-12-18, 01:18:03
Naja das Prüfen gehört eigtl. zum guten Stil dazu und kann oftmals Fehler oder Sicherheitslücken verhindern. Wenn du mal mit der error_reporting()-Funktion den Fehlermeldungslevel etwas detaillierter setzt (z.B. E_ALL), wird es ohne vorige isset-Prüfungen Fehlermeldungen hageln.

Kinman
2008-12-18, 08:10:23
Mit isset() ist das ganze natürlich schöner. Aber wenn Du diese Prüfung nicht machst, dann wird das Element erzeugt, wenn Du die Abfrage machst. Ist auch aus Ressourcensicht nicht schön (auch wenns nur minimal ist).

mfg Kinman

ZapBee
2008-12-18, 09:29:26
Ungeprüfte Übernahme von URL-Parametern ist u.U. kreuzgefährlich, Stichwort SQL-Injection. Ich prüfe jede Eingabe auf korrekten Typ (z.B. integer), wenn da ein Buchstabe dabei ist, tschüss. SQL-Befehle werden eh immer rausgeschmissen. Die Arbeit macht man sich nur einmal, ist aber essentiell.

robobimbo
2008-12-18, 17:25:11
um auch noch ein wenig meinen senf dazuzugeben, wenn du eingaben filterst - nach möglichkeit nur whitelisting machen - also generell alles verbieten und nur dass erlauben was du wirklich brauchst und verwendest.

Sephiroth
2008-12-18, 17:27:44
Mit isset() ist das ganze natürlich schöner. Aber wenn Du diese Prüfung nicht machst, dann wird das Element erzeugt, wenn Du die Abfrage machst. Ist auch aus Ressourcensicht nicht schön (auch wenns nur minimal ist).

mfg Kinman
Die wird nicht erzeugt, man erhält lediglich einen Hinweis, dass das Element nicht vorhanden ist.

sephiroth@home:~> php -a
Interactive mode enabled

<?php
$a=array(); echo $a['foo']; var_dump($a);
PHP Notice: Undefined index: foo in /home/sephiroth/- on line 2
array(0) {
}
echo $a['foo'];
PHP Notice: Undefined index: foo in /home/sephiroth/- on line 3
?>

Nach deiner Meinung dürfte kein 2. Hinweis über die Nicht-Existenz kommen.

Bei einer Zuweisung würde das Element dann erstellt werden.

Marscel
2008-12-18, 17:28:13
Besonders dann, wenn register_globals an ist.

Gast
2008-12-19, 02:30:29
Ungeprüfte Übernahme von URL-Parametern ist u.U. kreuzgefährlich, Stichwort SQL-Injection. Ich prüfe jede Eingabe auf korrekten Typ (z.B. integer), wenn da ein Buchstabe dabei ist, tschüss. SQL-Befehle werden eh immer rausgeschmissen. Die Arbeit macht man sich nur einmal, ist aber essentiell.

naja, dafür gibt's ja mysql_real_escape_string(), oder?

benutze jetzt aber doch zur Sicherheit noch isset(), wo ohne so viele Fehler kommen.

und was ist mit Whitelisting gemeint? wenn ich ein Formular hab dann greife ich im Skript doch sowieso nur auf die post-Einträge zu die ich kenne und lasse die anderen verfallen?