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
7
A
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
- 1. Verwenden von regulären Ausdrücken
- 2. Alternativen zu regulären Ausdrücken
- 3. Regeln mit regulären Ausdrücken
- 4. Gruppierung in regulären Ausdrücken
- 5. Multiplikation mit .NET regulären Ausdrücken
- 6. Neuformatierung Code mit regulären Ausdrücken
- 7. Verwenden von regulären Ausdrücken mit ‚msggrep‘
- 8. Verwenden von regulären Ausdrücken überlappende Teilmuster
- 9. Suchen von Wortkontext mit regulären Ausdrücken
- 10. Verwendung von regulären Ausdrücken in Python
- 11. Extrahieren von Daten mit regulären Python-Ausdrücken
- 12. Abhängigkeit von Symbol in regulären Ausdrücken
- 13. Passende Teile von URIs mit regulären Ausdrücken
- 14. Doppelte Interpolation von regulären Ausdrücken in Perl
- 15. Groß- und Kleinschreibung von regulären Ausdrücken
- 16. pyparsing eine Liste von regulären Ausdrücken (buchstäblich)
- 17. Worte von Abfragezeichenfolgen mit regulären Ausdrücken
- 18. Kombinieren von zwei regulären Ausdrücken mit replaceAll()
- 19. Tilde-Operator in regulären Ausdrücken
- 20. Kreditkartenformat mit regulären Ausdrücken validieren?
- 21. Spieldaten mit Python regulären Ausdrücken
- 22. String Matching mit regulären Ausdrücken
- 23. verschachtelter Text in regulären Ausdrücken
- 24. Logfile mit regulären Ausdrücken teilen
- 25. Grunt j mit regulären Ausdrücken
- 26. Was bewirkt "*" in regulären Ausdrücken?
- 27. Anker in regulären .NET-Ausdrücken
- 28. Übereinstimmende Versionsnummer Teile mit regulären Ausdrücken
- 29. extrahiert wiederkehrende Muster mit regulären Ausdrücken
- 30. Wie werden Umlaute mit regulären Ausdrücken verglichen?
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 ... –