Regex injection er en sikkerheds- og stabilitetsrisiko, hvor brugerinput indsættes direkte i et regulært udtryk uden korrekt validering eller escaping. Det kan føre til uforudsigelig adfærd, fejlagtige matches, performance-degradering eller i værste fald denial of service (ReDoS).
Regex injection opstår, når en applikation dynamisk konstruerer regulære udtryk baseret på input fra brugeren, og dette input ikke behandles sikkert. En angriber kan manipulere regex-strukturen ved at indsætte metategn (.*, |, (), +, ?) og dermed ændre formålet med valideringen eller søgningen.
Det er ikke kodeeksekvering, men kontrol over mønstret.
Typiske årsager:
Brugerinput indsat direkte i regex
Manglende escaping af metategn
Kompleks regex med backtracking
Brug af regex som valideringslogik i stedet for parsing
Eksempel (usikkert): $pattern = "/^$input$/";
Angriberen kan indsætte: .*
og omgå validering.
Omgåelse af input-validering
Manipulation af filtrering og søgning
Indirekte adgang til data, der burde være skjult
Katastrofal backtracking
CPU-spikes og request timeouts
Applikationsnedbrud under load
Regex-fejl der crasher requests
Uforudsigelige edge cases
Svært at teste og reproducere
Søgefelter med “avanceret søgning”
Dynamiske filtre
Brugerdefinerede valideringsregler
Admin-værktøjer med regex-understøttelse
Logfiltrering og rapportering
Brug sprogspecifikke escape-funktioner:
PHP: preg_quote($input, ‘/’)
JavaScript: dedikerede escape helpers
Python: re.escape(input)
Brug faste regex-mønstre
Brug string-sammenligning (===, contains)
Brug parser- eller tokenizer-tilgange
Undgå nested quantifiers
Brug non-backtracking regex engines hvis muligt
Sæt timeouts eller limits på regex-evaluering
Whitelist tilladte tegn
Begræns input-længde
Afvis regex-metategn hvis ikke eksplicit nødvendigt
SQL-escaping
HTML-escaping
WAFs (ofte blinde for regex-kontekst)
“Det er kun til intern brug”
Regex injection kan bruges til billig denial of service uden høj teknisk kunnen.
Overforbrug af regex indikerer ofte dårlig domænemodellering og tech debt.
Regex-baserede løsninger skalerer dårligt under uforudsigelige inputs.
Udfordring: Fleksible søgefunktioner
Løsning: Brug strukturerede filtre frem for regex
Udfordring: Legacy-validering
Løsning: Refaktor til eksplicit logik og constraints
Udfordring: Avancerede admin-features
Løsning: Isolér regex-funktionalitet og indfør hårde limits
Regex injection er ikke en edge-case.
Det er et forudsigeligt resultat af dynamisk regex uden kontrol.
Hvis brugere kan påvirke regex-strukturen, har de allerede for meget magt.
Den sikre tilgang er enkel:
Fast struktur
Escaping som standard
Regex som værktøj – ikke fundament