Reguläre Ausdrücke für Anfänger: Wie man beginnt, sensible Daten zu entdecken
May 29, 2019
Jede Lösung zur Datenentdeckung und -klassifizierung stützt sich stark auf reguläre Ausdrücke (manchmal auch RegExes, REs oder RegEx-Muster genannt), um sensible Daten zu identifizieren. Aber was sind RegExes und wie können sie verwendet werden, um sensible Daten zu entdecken? Lassen Sie uns das herausfinden.
Reguläre Ausdrücke sind eine kleine, aber hochspezialisierte Programmiersprache; sie sind im Grunde genommen Platzhalter mit erweiterten Funktionen. Mit dieser kleinen Sprache legen Sie Regeln fest, die definieren, welche Zeichenketten Sie abgleichen möchten. Zum Beispiel können Sie einen RegEx definieren, der E-Mail-Adressen, PII, PHI oder Kreditkartennummern entspricht.
Regex-Komponenten
Ein RegEx kann Literale und Metazeichen enthalten.
Literale
Jedes einzelne Zeichen, außer denen, die als Metazeichen reserviert sind, ist bereits ein regulärer Ausdruck an sich. Zum Beispiel, www ist ein Treffer für www.Netwrix.com, aber wwz ist es nicht. Beachten Sie, dass reguläre Ausdrücke groß- und kleinschreibungsempfindlich sind, also www wird nicht auf WWW oder wWw passen.
Metazeichen
Die folgenden einzelnen Zeichen werden nicht als Literale interpretiert, sondern haben spezielle Bedeutungen:
- . ^ $ * + ? { } [ ] | ( )
Die folgende Tabelle beschreibt die Funktion jeder dieser Metazeichen.
Art | Meta-Charaktere | Beschreibung | Beispiele |
|---|---|---|---|
|
Der Punkt |
. |
Das Periodenzeichen steht für ein beliebiges Zeichen. |
net.rix wird sowohl www.netwrix.com als auch www.netfrix.com entsprechen. |
|
Charakterklasse |
[] |
Übereinstimmungen für alles innerhalb der eckigen Klammern. |
Sie können Zeichen einzeln auflisten; zum Beispiel, Netwrix wird netw , netr und netx entsprechen, aber nicht netz. |
|
Anker |
^ |
Wird verwendet, um Zeichen am Anfang eines Strings zu finden |
^https wird https://netwrix.com entsprechen, aber nicht www.netwrix.com oder http://netwrix.com |
|
$ |
Wird verwendet, um Zeichen am Ende eines Strings zu finden |
com$ wird www.netwrix.com oder telecom entsprechen, aber nicht computer. |
|
|
Iteration / Quantoren |
? |
Entspricht dem vorhergehenden Element null oder einmal (es wird immer übereinstimmen, wenn der Buchstabe nicht gefunden wurde). Es ist hervorragend geeignet, um optionale Zeichen zu finden. |
Farbe wird sowohl color als auch colour entsprechen. |
|
|
* |
Entspricht dem vorhergehenden Element null oder mehrmals statt null oder einmal. Es ist hervorragend geeignet, um optionale Zeichenserien zu finden. |
ne*t entspricht nt (null e-Zeichen), net (ein e), neeet (drei e-Zeichen) und so weiter. |
|
+ |
Entspricht dem vorhergehenden Element ein- oder mehrmals. |
ne+t wird net und neeet abgleichen, aber nicht nt. |
|
|
| |
Der Auswahl-Operator entspricht entweder dem Ausdruck vor oder dem Ausdruck nach dem Operator. |
Netwrix wird Net und Wrix entsprechen. |
|
|
{} |
{x} stimmt überein, wenn das vorhergehende Element genau x Mal gefunden wird. |
n{3} entspricht nnn, nnnn und nnnd (weil sie alle n dreimal hintereinander enthalten), aber es wird nicht nnw entsprechen. |
|
|
Blockieren und Erfassen |
() |
Definiert eine Unterexpression, die später mit Kurzformen abgerufen werden kann: Die erste Unterexpression in Klammern kann mit \1 abgerufen werden, die zweite mit \2 und so weiter. |
Gr(a|e)y entspricht sowohl Gray als auch Grey. |
|
Escape-Sequenz |
\ |
Das auf den Schrägstrich folgende Metazeichen wird als Literal verwendet. |
www\.netwrix\.com wird www.netwrix.com entsprechen, aber nicht www,netwrix,com. |
|
Besondere Metazeichen |
\s |
Entspricht jedem Leerzeichen (einem Leerzeichen, einem Tabulator, einem Zeilenumbruch oder einem Seitenvorschub). |
Netwrix Auditor wird übereinstimmen mit Netwrix Auditor, und Netwrix Auditor, aber nicht mit Netwrix Auditor oder Netwrix Auditor. |
|
|
\S |
Entspricht jedem Zeichen, das kein Leerzeichen ist. |
Netwrix wird Netwrix und Netwrix. |
|
\w |
Entspricht jedem alphanumerischen Zeichen. |
\w\w\w entspricht net, dfw und Netwrix. |
|
|
\W |
Entspricht jedem nicht-alphanumerischen Zeichen. |
Netwrix\W wird Netwrix! und Netwrix?. |
|
|
|
\d |
Entspricht jeder Dezimalziffer. |
Netwrix\d\d wird Netwrix80 und Netwrix90 entsprechen. |
|
\D |
Entspricht jedem Zeichen, das keine Ziffer ist. |
Netwrix wird Netwrix und Netwrix. |
|
|
\a |
Entspricht jedem einzelnen alphabetischen Zeichen, egal ob Groß- oder Kleinbuchstabe. |
Netwrix wird übereinstimmen mit Netwrix, Netwrix und Netwrix. |
|
|
|
\b |
Definiert eine Wortgrenze. |
\brix wird rix und rixon übereinstimmen, aber nicht Netwrix. |
|
|
\B |
Definiert eine Nicht-Wortgrenze |
\Brix wird Netwrix und trix übereinstimmen, aber nicht rixon. |
Metazeichen-Kombinationen
Jetzt kennen wir fast alle Metazeichen und sind bereit, sie zu kombinieren.
Beispiel: Suche nach Kfz-Kennzeichen
Angenommen, wir müssen eine Lizenznummer im Format aaa-nnnn finden – die ersten drei Stellen müssen alphanumerisch und die letzten vier numerisch sein. Der Bindestrich kann durch ein beliebiges Zeichen ersetzt oder ganz weggelassen werden.
Das RegEx dafür wird sein:
- b[0-9A-Z]{3}([^ 0-9A-Z]|s)?[0-9]{4}b
Lassen Sie uns diesen RegEx analysieren:
- b erfordert eine Wortgrenze, sodass übereinstimmende Zeichenfolgen nicht Teil einer größeren Zeichenfolge sein können.
- [0-9A-Z]{3} bedeutet, dass die ersten drei Zeichen alphanumerisch sein müssen.
- ([^ 0-9A-Z]|s)? bedeutet, dass der folgende Teil des Strings entweder ein Trennzeichen — ein nicht alphanumerisches Zeichen oder ein Leerzeichen — oder gar nichts sein muss.
- [0-9]{4} bedeutet, dass der nächste Teil des Strings aus 4 Ziffern bestehen muss.
- b gibt eine weitere Wortgrenze an.
Dieser RegEx wird die folgenden Lizenznummern abgleichen: NT5-6345, GH3 9452, XS83289
Allerdings wird es diese Lizenznummern nicht abgleichen: ZNT49371, HG3-29347, nt4-9371
Beispiel: Suche nach Sozialversicherungsnummern
Ein weiteres gutes Beispiel ist die U.S. Social Security number (SSN), die immer das Format nnn-nn-nnnn hat.
Der einfachste RegEx ist folgender:
- [0-9]{3}-[0-9]{2}-[0-9]{4}
Allerdings wird dies zu falsch positiven Ergebnissen führen, da nicht alle Zahlen in dieser Form gültige SSNs sind. Außerdem werden einige tatsächliche SSNs übersehen, einschließlich solcher, die ohne Bindestriche geschrieben sind. Um genauere Ergebnisse zu erzielen, sollten wir eine komplexere erstellen. Wir wissen, dass:
- Keine Zifferngruppe darf nur Nullen enthalten.
- Der erste Block darf nicht 666 oder 900-999 sein.
- Sozialversicherungsnummern können mit Leerzeichen anstelle von Bindestrichen oder ganz ohne Trennzeichen geschrieben werden.
- Wenn der erste Block mit einer 7 beginnt, muss er von einer Zahl zwischen 0 und 6 gefolgt werden und dann einer beliebigen dritten Ziffer.
Daher wird der fortgeschrittene RegEx folgendermaßen aussehen:
- b(?!000|666|9d{2})([0-8]d{2}|7([0-6]d))([-]?|s{1})(?!00)dd2(?!0000)d{4}b
Wie zuvor, b am Anfang und Ende kennzeichnen eine Wortgrenze. Lassen Sie uns genauer auf jeden Zahlenblock dazwischen eingehen.
Der erste Block
- (?!000|666|9d{2}) ist eine negative Vorausschau, die festlegt, dass die Nummer nicht mit 000, 666 oder 9 gefolgt von zwei beliebigen Ziffern beginnen darf.
- ([0-8]d{2} gibt an, dass die Zeichenkette mit einer Ziffer zwischen 0 und 8 beginnen und danach zwei weitere Ziffern (0-9) haben muss.
- |7[0-6]d)) besagt, dass es mit 7 beginnen muss, die nächste Ziffer muss zwischen 0 und 6 liegen, gefolgt von einer beliebigen Ziffer.
- ([-]?|s{1}) gibt an, dass nach den drei Ziffern entweder ein Bindestrich, ein Leerzeichen oder gar nichts stehen soll, um das Ende des ersten Blocks zu kennzeichnen.
Der zweite Block
- (?!00) ist eine weitere negative Vorausschau, die festlegt, dass es kein 00 im zweiten Block geben darf.
- dd gibt an, dass im zweiten Block zwei beliebige Ziffern stehen müssen.
- 2 entspricht demselben Text wie die zweite Erfassungsgruppe, also ([-]?|s{1}), was bedeutet, dass der zweite Block mit einem Bindestrich, einem Leerzeichen oder gar keinem zusätzlichen Zeichen enden kann.
Der dritte Block
- (?!0000) ist eine weitere negative Vorausschau, die festlegt, dass im dritten Block nicht vier Nullen stehen dürfen.
- d{4} erfordert vier Ziffern im dritten SSN-Block.
Beispiele für beliebte RegExes
Um zu finden | Verwenden Sie diesen RegEx | Beispiel für eine Übereinstimmung |
|---|---|---|
|
E-Mail-Adressen |
^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}$ |
T.Simpson@netwrix.com |
|
Sozialversicherungsnummern der USA |
\b(?!000|666|9\d{2})([0-8]\d{2}|7([0-6]\d))([-]?|\s{1})(?!00)\d\d\2(?!0000)\d{4}\b |
513-84-7329 |
|
IPV4-Adressen |
^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}$ |
192.168.1.1 |
|
Datumsangaben im Format MM/TT/JJJJ |
^([1][12]|[0]?[1-9])[\/-]([3][01]|[12]\d|[0]?[1-9])[\/-](\d{4}|\d{2})$ |
05/05/2018 |
|
MasterCard-Nummern |
^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$ |
5258704108753590 |
|
Visa-Kartennummern |
\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[- |
4563-7568-5698-4587 |
|
American Express-Kartennummern |
^3[47][0-9]{13}$ |
34583547858682157 |
|
US-Postleitzahlen |
^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))$ |
97589 |
|
Dateipfade |
\\[^\\]+$ |
\\fs1\shared |
|
URLs |
(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+ |
www.netwrix.com |
Hilfreiche Regex-Webressourcen
- https://regexr.com und https://regex101.com helfen Ihnen dabei, Ihre RegExes zu überprüfen, indem sie Syntax hervorheben und Tooltips anzeigen.
- https://regexcrossword.com ist ein Kreuzworträtselspiel, bei dem die Hinweise mit regulären Ausdrücken definiert werden.
- https://www.regular-expressions.info ist eine großartige Website mit Informationen über reguläre Ausdrücke. Zusätzlich hat das Tool Notepad++ eine RegEx-Hilfserweiterung, die Ihnen gut dienen wird, während Sie mit regulären Ausdrücken arbeiten.
Teilen auf
Erfahren Sie mehr
Über den Autor
Jeff Melnick
Direktor für Systemtechnik
Jeff ist ehemaliger Director of Global Solutions Engineering bei Netwrix. Er ist ein langjähriger Netwrix-Blogger, Redner und Präsentator. Im Netwrix-Blog teilt Jeff Lifehacks, Tipps und Tricks, die Ihre Systemadministrationserfahrung erheblich verbessern können.
Erfahren Sie mehr zu diesem Thema
Die nächsten fünf Minuten der Compliance: Aufbau einer identitätsorientierten Datensicherheit in der APAC-Region
Vom Lärm zur Aktion: Datenrisiken in messbare Ergebnisse umwandeln
Datenschutzgesetze der Bundesstaaten: Unterschiedliche Ansätze zum Datenschutz
Beispiel für Risikoanalyse: Wie man Risiken bewertet
Das CIA-Dreieck und seine Anwendung in der realen Welt