Dire che voglio consentire a un utente di immettere qualsiasi espressione regolare che desidera e una stringa da abbinare, e verificherò se corrisponde a quello utilizzato con Python re.compile
. È sicuro? C'è un modo per un utente malintenzionato di arrestarsi in modo anomalo o ottenere l'esecuzione remota passando stringhe appositamente predisposte?Sicurezza delle espressioni regolari
7
A
risposta
9
Non penso che lo re.compile()
sarà un problema. Ovviamente può generare un'eccezione con espressioni regex non valide, ma è possibile individuarle facilmente. Le regex di Python non consentono callout di codice (a differenza di Perl, ad esempio), quindi non vedo un meccanismo che un utente malintenzionato potrebbe utilizzare per iniettare codice dannoso in un'espressione regolare.
effettivamente in esecuzione la regex (via re.search()
ecc) può essere un problema, però, perché Python non prende alcuna precauzione contro catastrophic backtracking che possono causare runtime del regex a salire alle stelle.
Potrebbe essere una buona idea eseguire la regex in un processo dedicato e ucciderlo se non finisce entro un secondo circa.
Problemi correlati
- 1. Limitazioni delle espressioni regolari?
- 2. Corrispondenza delle espressioni regolari Prolog
- 3. I dialetti delle espressioni regolari non sono regolari?
- 4. Rappresentare identificatori uso delle espressioni regolari
- 5. Spiegazione delle espressioni regolari per vim
- 6. Negazione delle stringhe utilizzando le espressioni regolari
- 7. Errore di sintassi delle espressioni regolari
- 8. Doppia interpolazione delle espressioni regolari in Perl
- 9. Sanitizzazione delle espressioni regolari fornite dall'utente in PHP
- 10. Espressioni regolari sulla punteggiatura
- 11. Alternative alle espressioni regolari
- 12. Java String.replaceTutte espressioni regolari
- 13. Comprendere le espressioni regolari
- 14. Espressioni regolari ungreedy
- 15. espressioni regolari lookbehind problema
- 16. Espressioni regolari e assemblaggio
- 17. Pulisci espressioni regolari Python
- 18. prove sulle espressioni regolari
- 19. Espressioni regolari Equivalenza
- 20. case-insensitive espressioni regolari
- 21. Puzzle con espressioni regolari
- 22. Commentando le espressioni regolari
- 23. Espressioni regolari prefisso fisso
- 24. Espressioni regolari nel findstr
- 25. Espressioni regolari lookahead negativo
- 26. espressioni regolari Fuzzy
- 27. Espressioni regolari in OCaml
- 28. Espressioni regolari in C
- 29. Espressioni regolari Python O
- 30. Espressioni e corrispondenza regolari
Come nota a margine, a seconda delle esigenze, forse vale la pena considerare un'espressione _glob_ semplice, piuttosto che un'espressione regolare a pieno titolo. Per la maggior parte degli utenti è più facile da capire. E richiederà molto meno potere per elaborare. Ma di nuovo, dipenderà dai tuoi bisogni ... –