PHP-Bug im Vergleichsoperator == ?

13.01.2009 | 17:34:46

Heute habe ich, zusammen mit einem Kollegen, feststellen müssen dass der Vergleichsoperator scheinbar ein Typecasting bei Vergleichen zwischen (etwaigen) Integerwerten und Strings vornimmt – und zwar immer zu Integer-Werten. Das hat zur Folge, dass Vergleiche mit “0″ mit einem String “abc” zu einer wahren Aussage führen. Bei uns hat das eine “kleine” Sicherheitslücke gerissen, die alles andere als schön war. Das ganze lässt sich unter Debian mit der PHP-Version 5.2.6-0.1~lenny1 und folgendem Code nachvollziehen:

$a = 0;
$b = "abdbbsb";
 
if($a == $b) echo 1;
else echo 0;
# Ausgabe 1

if((string)$a == $b) echo 1;
else echo 0;
# Ausgabe 0

if($a === $b) echo 1;
else echo 0;
# Ausgabe 0

2 Antworten zu “PHP-Bug im Vergleichsoperator == ?”

unset sagte am 14.01.2009 um 14:03:47 Uhr:

Wieso Bug. Das ist die Auflösung von loose comparisons. Nachzulesen hier: http://de3.php.net/types.comparisons.

Stephan Straubel sagte am 14.01.2009 um 14:10:59 Uhr:

Stimmt – nur braucht man ziemlich lange um darauf zu stossen, wenn mans nicht vorher weiß. Eher nachlässig in Sachen Dokumentation (würde ich jetzt behaupten). Nen Bug ist es zugegebenermaßen nicht, aber es wäre (meiner Meinung nach) besser, wenn das auf diese Weise nicht passieren würde. Auch wenn PHP eine typfreie Sprache ist (weitestgehend).

Der Titel war deswegen auch ne Frage :-)

Einen Kommentar schreiben

Comment Spam Protection by WP-SpamFree