Wer weiß, eine effektive und sichere Methode, um zu sehen, ob diese Eingabe:
%Vor%stimmt mit etwas überein, das diesem Array inkonsistenter Filter ähnelt (beachte, dass 200.100. *. * nur als 200.100. * ausgedrückt werden kann) mit Platzhaltern, die durch * 's:
angezeigt werden %Vor%Aktualisieren
Gedanken?
%Vor%Ich habe dies nicht benchmarkiert, aber ich würde mich dafür entscheiden, die Methode zu verwenden, die die Netzwerkhardware / -software verwendet ...
Ersetze irgendeinen * durch 0 und 255. Konvertiere die IPs in Ganzzahlen
Wenn also 255.255.255. * zu 255.255.255.0 und 255.255.255.255 wird Dann funktioniert ip2long auf diesen beiden ips.
Dann können Sie die angegebene IP in lange IP konvertieren. zum Beispiel 255.255.50.51 in lange IP.
Dann können Sie vergleichen, ob die lange IP für diese gegebene IP zwischen den konvertierten langen IPs in der Blacklist ist. Wenn es dann ist, ist es nicht erlaubt, sonst ist es.
%Vor%Nur zum Spaß, ich werde das überbearbeiten. Nun, es sei denn, Sie haben eine ziemlich lange Liste, gegen die Sie sich einigen müssen.
Angenommen, Sie verwenden nur Platzhalter, um "Ich interessiere mich nicht für dieses Oktett", dann können Sie jeden Eintrag in Ihrem Array in vier Werte (einen pro Oktett) parsen. Angenommen, Sie verwenden -1, um Platzhalter zu verwenden, bedeutet 0-255, dass dieser Wert exakt übereinstimmt. (Wenn Sie eine bessere Leistung als O (n) benötigen, wobei n die Größe der Trefferliste ist, dann gibt es hier bessere Datenstrukturen, z. B. einen Trie.) Rufen Sie dieses Array auf Natürlich brauchen Sie das nur einmal - nicht pro Anfrage.
Sie können die entfernte Adresse dann auf die gleiche Weise analysieren (außer ohne Platzhalter). Sie können auch feststellen, dass REMOTE_ADDR nicht im erwarteten Format angezeigt wird. Es wird jetzt ziemlich einfach, Übereinstimmungen zu überprüfen:
%Vor%(Das ist natürlich Pseudocode)
Tags und Links string php performance