SEO Welten
Buchempfehlungen
|
|
RegEx: Verwendung von regulären Ausdrücken
Mit regulären Ausdrücken Formulareingaben filtern
Übersicht / Seite:
- Reguläre Ausdrücke (kleine Einführung mit Beispielen zur Syntax)
- Formulareingaben überprüfen (Eingaben auf Vollständigkeit überprüfen)
- Reguläre Ausdrücke mit PHP prüfen (...und RewriteRules testen)
- Mit Regex in Dateien suchen (kleines Script mit Suchfunktion)
- Im Quelltext/Quellcode suchen (Script zur Suche in Dateien)
Vorbemerkungen zur Syntax
Beinahe gleich, um welche Script- oder Programmiersprache es sich auch immer
handeln mag, wer sich ernsthaft mit dem Erlernen einer Programmiersprache beschäftigen möchte, wird früher
oder später nicht um die Verwendung von regulären Ausdrücken herum kommen. Beim Einstieg in PHP sieht die
Angelegenheit nicht anders aus. Bereits beim ersten, gegen unlautere Eingaben abzusichernden Formular, kommt
ein Programmierer mit der Nutzung von Filterfunktionen und regulären Ausdrücken in Berührung.
Der einzige Ausweg, der einem unerfahrenen Programmierer anfänglich noch verbleiben würde, insofern er sich
nicht gleich mit der Syntax von regulären Ausdrücken belasten möchte, wäre die Möglichkeit im Internet nach
einem passenden Code-Schnipsel zu suchen. Findet er einen geeigneten Code-Schnipsel, könnte er diesen kopieren
und ins eigene Listing übernehmen. Doch Vorsicht! Mit dem Kopieren verhält es sich wie mit dem Abschreiben
in der Schule, da durch eigene Unwissenheit schnell kleinere oder größere Fehler mit übernommen und im ungünstigsten
Fall durch diese Vorgehensweise größere Sicherheitslücken geschaffen werden.
Nachfolgend ein Beispiel für einen einst gefertigten, voll funktionsfähigen Code-Schnipsel, bei dem dennoch
die Syntax nicht stimmt. Gedacht war dieser Schnipsel ursprünglich zur Absicherung von Formularen. Mit Hilfe
der PHP-Funktion preg_replace() sollte aus den übermittelten Formulareingaben alle unerwünschten Zeichen
ausgefiltert und nur Buchstaben einschließlich Umlauten, Ziffern und typische Satzzeichen durchgelassen
werden.
Ein voll funktionfähiges Beispiel mit fehlerhafter Syntax:
<?php
$eing = "Ein {Teststring: Version/1.0} + ein weiteres Wort?!";
$ausg = preg_replace("/[^a-zA-ZäöüÄÖÜß0-9\.,:;\-\!\?\+]/"," ",$eing);
echo "Ausgabe: ".$ausg."\n";
// Ausgabe: Ein Teststring: Version 1.0 + ein weiteres Wort?!
?>
Die Fehler sind in diesem kleinen Exempel noch relativ harmlos, doch wo liegen
diese Fehler? Im Beispiel werden innerhalb einer mit eckigen Klammer eingefassten Zeichenauswahl mehr "vermeintliche"
Metazeichen mit einem Backslash maskiert, als es in einer benutzerdefinierten [Zeichenklasse] gibt. Weiterhin
wurde die Position des Minuszeichens unpassend gewählt.
Dazu sollte ein Coder wissen, dass außer dem \ Backslash, dem ^ Hütchenzeichen (Zirkumflex), dem
- Minuszeichen und der schließenden eckigen ] Klammer alle sonstigen Zeichen keine Bedeutung als Metazeichen
innerhalb einer Zeichenklasse besitzen. So steht zum Beispiel ein unmaskierter Punkt in einem regulären
Ausdruck für ein beliebiges Zeichen. Innerhalb einer Zeichenklasse ist hingegen ein Punkt nur ein Punkt
und kein Metazeichen und braucht somit nicht durch einen Backslash als Escape-Sequenz maskiert zu werden.
Einzig dem Umstand, dass PHP unnütze Maskierungen von "normalen" Zeichen ignoriert bzw. die Zeichen
innerhalb einer Escape-Sequenz als "normal" behandelt, ist es zu verdanken, dass die Funktion
preg_replace() im obigen Beispiel wie erwartet ihre Arbeit verrichtet.
Ferner sollte bedacht werden, dass sich mehrere kleine Schnitzer schnell zu einem größeren Fehler summieren
können. Um bei dem gewählten Beispiel zu bleiben, ein Minuszeichen, welches innerhalb einer Zeichenklasse
zwischen einzelnen Zeichen steht, wird von PHP nicht als Minuszeichen gewertet, sondern als Kennzeichen
für einen von bis Bereich. Vom A-Z Bereich haben wir noch eine klare Vorstellung von den in diesem Bereich
enthaltenen Zeichen. Doch welche Zeichen befinden sich in einem unbewusst gewählten Bereich? Wird das Minuszeichen
hingegen an den Anfang oder an das Ende einer Zeichenklasse eingefügt, kann es keinen Bereich mehr kennzeichnen
und wird als einzelnes Zeichen ausgewertet.
Nachfolgend das obige, jedoch von überflüssigen Escapezeichen (Backslash)
bereinigte Beispiel:
<?php
$eingabe = "Ein {Teststring: Version/1.0} + ein weiteres Wort?!";
$ausgabe = preg_replace("/[^a-zA-ZäöüÄÖÜß0-9.,:;!?+-]/"," ",$eingabe);
echo "Ausgabe: ".$ausgabe."\n";
// Ausgabe: Ein Teststring: Version 1.0 + ein weiteres Wort?!
?>
Wie die Gegenüberstellung der beiden Exempel zeigte, ist nicht nur das Erlernen
einer Script- oder Programmiersprache wichtig, um sichere Anwendungen zu programmieren, sondern ein Programmierer
sollte reguläre Ausdrücke und deren Syntax zumindest verstehen. Doch was sind eigentlich reguläre Ausdrücke?
Was sind reguläre Ausdrücke?
Bei regulären Ausdrücken handelt es sich um Suchmuster, die geeignet sind
Zeichenketten nach vorgegebenen oder vom Benutzer frei definierten Kriterien zu durchsuchen. Die Kurzform
RegEx, ebenso die deutsche Bezeichnung für einen regulären Ausdruck, leiten sich dabei von der englischen
Bezeichnung Regular Expression ab. Je nach dem beabsichtigten Ergebnis, können die Suchmuster recht komplexe
Formen annehmen und umfangreiche Veränderungen von Zeichenketten (Strings) ermöglichen.
So wurde in den bisherigen Beispielen nicht nach Buchstaben oder Zahlen gesucht, da durch einen Zirkumflex
am Anfang der Zeichenklasse (Character Class) alle Buchstaben des lateinischen Alphabetes sowie
europäische Ziffern des Dezimalsystems und einige Satzzeichen negiert wurden. Vielmehr wurde nach allen
Zeichen gesucht, die nicht in der definierten Zeichenklasse aufgeführt sind, um diese durch ein Zeichen
oder eine Zeichenkette zwischen " " zu ersetzen, im Beispiel durch ein Leerzeichen (Whitespace) " ".
Je nach der verwendeten Script- oder Programmiersprache gibt es unterschiedliche Implementierungen in Form
von Programm-Bibliotheken, in den die erforderlichen Funktionen enthalten sind. So ist in PHP ist eine PCRE-Bibliothek
enthalten. Das Kürzel PCRE steht dabei für die englische Bezeichnung Perl Compatible Regular Expressions.
Bis zur PHP Version kleiner 5.3 wurde auch noch POSIX Regex unterstützt, gilt jedoch seither als veraltet.
Die Verwendungsmöglichkeiten und die Komplexität von regulären Ausdrücken beginnen bei einfachsten Anwendungen
und Suchmustern, wie der Suche nach einzelnen Zeichen, Silben oder Worten in einer Zeichenkette. Reguläre
Ausdrücke können aber auch für aufwendige Suchvorgänge genutzt werden und in diesen Fällen oftmals umfangreiche
Suchmuster erforderlich machen. Den Einsatzmöglichkeiten werden praktisch nur Grenzen durch die jeweilige
Programmiersprache und durch die jeweils zur Verfügung stehende Rechenleistung gesetzt.
Auf der folgenden Seite ein Beispiel, um die in einem Formular eingegebenen Namen auf die Korrektheit der bei
Namen übliche Syntax zu überprüfen.
weiterlesen » Formulareingaben überprüfen
| mit PHP prüfen | Suchfunktion
|
|
Navigation
Finden und
gefunden werden ...
- Optimierung -
Webcoding
Übersicht
Web Services
Tutorials &
diverse Listings
und vieles mehr...
XML
|