Inefficient Regular Expression Complexity
The product uses a regular expression with an inefficient, possibly exponential worst-case computational complexity that consumes excessive CPU cycles.
Certain regular expression patterns can take exponential time to evaluate on certain inputs (ReDoS). Attackers can craft inputs that cause the regex engine to consume excessive CPU time, leading to denial of service.
Comment corriger cette vulnérabilité
Stratégies de prévention pour ReDoS basées sur 3 règles de détection Shoulder.
Avoid nested quantifiers in regex; use specific character classes instead
- re := regexp.MustCompile("(a+)+b") + re := regexp.MustCompile("^[a-z]+b$")
Avoid nested quantifiers in regex and validate input length before matching
- const emailRegex = /^([a-zA-Z0-9]+\.)+[a-zA-Z]{2,}$/; - if (emailRegex.test(req.body.email)) { + const validator = require('validator'); + + if (req.body.email.length > 254) { + return res.status(400).json({ error: 'Input too long' }); + } + if (validator.isEmail(req.body.email)) { processEmail(req.body.email); }
Replace nested quantifiers with simple patterns and bounded repetition
import re - email_pattern = re.compile(r'^([a-zA-Z0-9._-]+)+@[a-zA-Z0-9.-]+$') + email_pattern = re.compile(r'^[a-zA-Z0-9._-]{1,64}@[a-zA-Z0-9.-]{1,255}$') def validate_email(email): return email_pattern.match(email)
Pratiques clés
- Use exponential time complexity when matching certain inputs
Trouvez les vulnérabilités dans votre code
Utilisez Shoulder pour scanner votre code à la recherche de patterns Inefficient Regular Expression Complexity. 3 règles.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=1333 # Or scan entire project npx @shoulderdev/cli trust .
Règles de Détection (3)
Ce qu'il faut surveiller lors des revues de code
Ces patterns indiquent des vulnérabilités potentielles Inefficient Regular Expression Complexity. Recherchez-les lors des revues de code et des audits de sécurité.
Scannez votre base de code pour Inefficient Regular Expression Complexity
Shoulder CLI trouve les motifs vulnérables dans toute votre base de code.