Heim > Backend-Entwicklung > PHP-Tutorial > Einige Fallstricke von „==' in PHP

Einige Fallstricke von „==' in PHP

藏色散人
Freigeben: 2023-04-07 14:40:01
nach vorne
3186 Leute haben es durchsucht

PHP ist eine schwach typisierte Sprache und führt automatisch eine Datentypkonvertierung durch, was unserer Entwicklung zweifellos große Erleichterung bringt. Aber ist das wirklich so? Heute beginnen wir mit ==.

Beispiel

Schauen Sie sich zunächst diesen Code an. Ratet mal, was das Ergebnis sein wird

<?php
var_dump(md5(&#39;240610708&#39;) == md5(&#39;QNKCDZO&#39;));
var_dump(md5(&#39;aabg7XSs&#39;) == md5(&#39;aabC9RqS&#39;));
var_dump(sha1(&#39;aaroZmOk&#39;) == sha1(&#39;aaK1STfY&#39;));
var_dump(sha1(&#39;aaO8zKZF&#39;) == sha1(&#39;aa3OFF9m&#39;));
var_dump(&#39;0010e2&#39; == &#39;1e3&#39;);
var_dump(&#39;0x1234Ab&#39; == &#39;1193131&#39;);
var_dump(&#39;0xABCdef&#39; == &#39; 0xABCdef&#39;);
var_dump(0 == &#39;abcdefg&#39;);
var_dump(1 == &#39;1abcdef&#39;);
?>
Nach dem Login kopieren

Auf den ersten Blick ist es offensichtlich, dass sie alle falsch sind, aber nachdem ich den Code ausgeführt habe, habe ich festgestellt, dass sie alle wahr sind!

WTF!

Warum passiert das?

Ich habe bereits zu Beginn gesagt, dass PHP eine schwach typisierte Sprache ist. Wenn Sie == zum Vergleichen zweier Variablen verwenden und eine Variable eine Ganzzahl ist, wird die andere Variable ebenfalls in eine Ganzzahl konvertiert. Dies erklärt auch, warum 0 == 'abcdefg' und 1 == '1abcdef' wahr sind.

Aber was ist mit den anderen Codes? Können Strings trotzdem konvertiert werden?

Das PHP-Handbuch liefert uns Erklärungen.

Wenn Sie eine Zahl mit einer Zeichenfolge vergleichen oder der Vergleich numerische Zeichenfolgen umfasst, wird jede Zeichenfolge in eine Zahl umgewandelt und der Vergleich numerisch durchgeführt.

Das heißt, wenn Sie zwei Zeichenfolgen vergleichen Zahlen (z. B. „0“), dann wird jede Zeichenfolge in eine Zahl umgewandelt.

Hier muss ich sagen: PHP ist die beste Sprache!

Gefahren

Wenn unsere Website direkt mit MD5 oder Sha1 ohne Salt verschlüsselt ist und es vorkommt, dass die Verschlüsselung des Passworts eines Benutzers Zahlen beinhaltet, kann es von geknackt werden Kollision!

Lösung

1. Vermeiden Sie die Verwendung von == während des Entwicklungsprozesses so weit wie möglich.

Es ist so Verwenden Sie am besten die Passwortverschlüsselung „password_hash()“ oder „salt md5($pwd.$salt)“

Weitere PHP-Kenntnisse finden Sie auf der PHP-Chinese-Website!

Das obige ist der detaillierte Inhalt vonEinige Fallstricke von „==' in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage