Sven Rautenberg: Ist ein einfaches "&" bei einer Abfrage ein Fehler?

Beitrag lesen

Moin!

auf dieser Seite habe ich beim zweiten Tipp ("Check for suspicious activity and immediately...") im unteren schwarzen Kästchen folgende Abfrage gefunden:

If ($_SESSION['_USER_LOOSE_IP'] != long2ip (ip2long ($_SERVER['REMOTE_ADDR']) & ip2long ("255.255.0.0"))

Ist das einfache "&" hier ein Fehler?

Nein. "ip2long()" erzeugt aus einer IP-Adresse die zugehörige Integerzahl, wenn man die dezimalen Zahlwerte als Bytes auffasst. Das zweite "ip2long()" erzeugt ein Bitmuster, welches UND-verknüpft mit der IP-Adresse des Users, die letzten beiden Zahlwerte der IP auf 0 setzt, also praktisch ausblendet.

Das Verfahren hat ein paar kleine Problemchen:

Erstens: Was ist mit IPv6? Wird nicht berücksichtigt, sollte es aber besser.

Zweitens: Ein sogenanntes /16-Netz ist einigermaßen riesig - ist es überhaupt sinnvoll, so eine Prüfung dann noch durchzuführen? Andererseits: Setzt man die Grenze enger, kriegt man eventuell korrekte Benutzer ausgeloggt, die nur regulär ihre IP gewechselt bekommen haben.

Insofern bleibt da bei mir ein wenig schaler Beigeschmack: Wer gibt denn heutzutage noch solche komischen Tipps und erklärt sie so schlecht?

- Sven Rautenberg