2014-08-31 32 views
7

Sagen, dass ich eine Benutzereingabe geben soll, welcher reguläre Ausdruck er will, und eine Zeichenfolge, um übereinzustimmen, und ich werde überprüfen, ob es Pythons re.compile entspricht. Ist das sicher? Gibt es eine Möglichkeit für einen böswilligen Benutzer zum Absturz zu kommen oder Remote-Ausführung zu erhalten, indem speziell gestaltete Strings übergeben werden?Sicherheit von regulären Ausdrücken

+2

Als eine Randnotiz, abhängig von Ihren Bedürfnissen, vielleicht eine Überlegung wert ein einfacher _glob_ Ausdruck, anstatt vollwertige Regex. Für die meisten Benutzer ist es einfacher zu verstehen. Und es wird viel weniger Energie benötigen, um zu verarbeiten. Aber wieder hängt es von Ihren Bedürfnissen ab ... –

Antwort

9

Ich glaube nicht, dass re.compile() wird ein Problem sein. Natürlich kann es eine Ausnahme mit ungültigen Regexes auslösen, aber Sie können sie leicht fangen. Python-Regexes erlauben keine Code-Callouts (im Gegensatz zu Perl zum Beispiel), daher sehe ich keinen Mechanismus, mit dem ein Angreifer bösartigen Code in eine Regex einschleusen könnte.

Eigentlich kann das Ausführen der Regex (über re.search() etc.) ein Problem sein, weil Python keine Vorkehrungen gegen catastrophic backtracking trifft, was dazu führen kann, dass die Laufzeit der Regex in die Höhe schnellen wird.

Es kann eine gute Idee sein, die Regex in einem dedizierten Prozess auszuführen und diese zu beenden, wenn sie nicht innerhalb einer Sekunde beendet wird.

Verwandte Themen