Table des matières
Qu'est-ce qu'une attaque Redos?
Comment Redos a un impact sur votre application
Stratégies pour prévenir les redos
1. Évitez les quantificateurs ambigus ou imbriqués
2. Utilisez des groupes non capturiques et atomiques lorsque cela est possible
3. Appliquer les limites de longueur d'entrée
4. Utilisez Regex en toute sécurité dans les chemins critiques
5. Tire des outils pour détecter les modèles vulnérables
Exemple du monde réel: la validation des e-mails a mal tourné
Réflexions finales
Maison développement back-end tutoriel php Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace

Aug 13, 2025 pm 03:17 PM
PHP Regular Expressions

Les attaques Redos exploitent des modèles regex inefficaces pour provoquer le déni de service via une utilisation excessive du processeur. 1. Évitez les quantificateurs imbriqués comme (a) en simplifiant à a. 2. Utilisez des groupes atomiques (?> ...) pour éviter de revenir en arrière. 3. Limiter la longueur d'entrée avant l'évaluation regex. 4. Évitez les regex complexes dans les chemins critiques; Précompiler et définir des délais d'attente. 5. Utilisez des outils comme Regex-Static-Analysis ou Eslint-Plugin-Security pour détecter tôt les vulnérabilités. Préférez toujours les modèles simples, validez les e-mails avec des bibliothèques dédiées et traitez les experts en exploits comme des vecteurs d'attaque potentiels pour créer des applications sécurisées et résilientes.

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace

Les expressions régulières sont des outils puissants pour la correspondance des modèles et la validation des entrées dans les applications, mais ils peuvent devenir une responsabilité de sécurité s'ils ne sont pas utilisés avec soin. Une vulnérabilité souvent négligée est le déni de service de l'expression régulière (redos) - un type d'attaque de déni de service qui exploite les modèles regex inefficaces pour consommer des ressources CPU excessives, provoquant un ralentissement ou de ne pas répondre à une application.

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace

Qu'est-ce qu'une attaque Redos?

Les redos se produisent lorsqu'un moteur regex passe une quantité excessive de temps à évaluer une entrée crafée de manière malveillante contre une expression régulière mal conçue. Cela se produit en raison du retour en arrière exponentiel dans les modèles qui contiennent des quantificateurs imbriqués ou des alternatives ambiguës (par exemple .*.* , (a ) , ou (\d )* ).

Par exemple, considérez ce regex:

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace
 ^ (a) $

Cela semble inoffensif, mais lorsqu'il est testé contre une chaîne comme "aaaaX" , le moteur essaie d'innombrables combinaisons de la façon dont les groupes a peuvent correspondre à l'entrée avant de conclure qu'il ne correspond pas. Avec des intrants plus longs, cela peut prendre des secondes, voire des minutes, un problème grave dans les applications à fort trafic.

Comment Redos a un impact sur votre application

Lorsqu'un attaquant envoie des entrées conçues pour déclencher des performances regex du pire cas:

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace
  • Les points de terminaison de l'API utilisant de tels regex peuvent accrocher.
  • Les temps de réponse du serveur augmentent considérablement.
  • Les pointes d'utilisation du processeur, affectant potentiellement d'autres services.
  • Dans les cas extrêmes, l'ensemble du service devient indisponible.

Cela fait de Redos une réelle menace, en particulier dans l'authentification, le routage ou la logique de désinfection d'entrée où l'expulsion est courante.

Stratégies pour prévenir les redos

1. Évitez les quantificateurs ambigus ou imbriqués

Des modèles comme (.*.*) , (ab )* , ou (.\*)* Sont des drapeaux rouges. Ils créent un potentiel de retour en arrière massif. Au lieu de cela, simplifiez-les ou réécrivez-les.

Alternative plus sûre : si vous devez faire correspondre un ou plusieurs a suivi de quelque chose, utilisez des groupes atomiques ou des quantificateurs possessifs (le cas échéant) ou restructurer la logique.

Par exemple, remplacer:

 ^ (a) $

avec:

 ^ A $

2. Utilisez des groupes non capturiques et atomiques lorsque cela est possible

Le regroupement sans capture réduit les frais généraux. Les groupes atomiques (par exemple, (?>...) ) Empêchent le retour de retour dans le groupe une fois apparié, limitant les pires scénarios.

Exemple:

 ^ (?> (a)) $

Cela échoue plus rapidement sur les entrées non correspondantes car le moteur ne réessayera pas les combinaisons internes.

3. Appliquer les limites de longueur d'entrée

Même les regexants sûrs peuvent être dangereux sur des intrants extrêmement longs. Imposez toujours des restrictions de longueur d'entrée raisonnables avant l'évaluation regex.

Par exemple:

 if (input.length> 1000) {
  lancer une nouvelle erreur ("entrée trop longue");
}
// alors appliquez le regex

Cela empêche les attaquants d'envoyer des charges utiles de kilobyte conçues pour exploiter les cas Edge.

4. Utilisez Regex en toute sécurité dans les chemins critiques

Évitez les regex complexes dans les chemins de code à haute fréquence comme l'authentification ou le routage. Si vous devez les utiliser:

  • Modèles regex pré-compiles.
  • Test des performances avec les entrées les pires cas.
  • Définissez les délais d'expiration si votre environnement le prend en charge (par exemple, certaines bibliothèques regex autorisent les limites d'exécution).

5. Tire des outils pour détecter les modèles vulnérables

Utilisez des outils d'analyse statique pour attraper des regex anciens au cours du développement:

  • Regex-statique-analyse - détecte les vulnérabilités redos.
  • Les plugins Eslint comme le drapeau eslint-plugin-security Utilisation de l'expulsion risquée.
  • Les scanners en ligne comme Regex101 (avec prudence) peuvent aider à visualiser le retour en arrière.

Exemple du monde réel: la validation des e-mails a mal tourné

Une erreur courante consiste à utiliser des examens trop complexes pour la validation des e-mails:

 ^ [a-za-z0-9 ._% -] @ [a-za-z0-9.-] \. [a-za-z] {2,} $

Bien que cela semble bien, l'ajout de quantificateurs imbriqués (par exemple, (. ) @ ) Ou permettre une flexibilité excessive peut ouvrir la porte aux redos.

✅ Meilleure approche:

  • Utilisez une correspondance de motifs simples pour les vérifications de format de base.
  • Comptez sur des bibliothèques de validation par e-mail dédiées.
  • Ou valider via des e-mails de confirmation au lieu d'un regex complexe.

Réflexions finales

Les regex sont pratiques mais dangereux lorsqu'ils sont mal utilisés. Les attaques Redos exploitent des inefficacités subtiles qui sont difficiles à repérer lors de l'examen du code. La clé est de:

  • Écrivez des modèles simples et précis.
  • Évitez l'ambiguïté et le retour en arrière.
  • Limiter la taille de l'entrée.
  • Utilisez des outils pour détecter les vulnérabilités tôt.

En traitant les regex d'exploitation comme des vecteurs d'attaque potentiels - pas seulement des fonctions d'utilité - vous pouvez créer des applications plus résilientes et sécurisées.

Fondamentalement, si votre regex a l'air trop intelligent, cela pourrait être trop risqué. Gardez les choses simples, testez-le dur et ne faites jamais confiance à la saisie des utilisateurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le modificateur «U» Unleashed: une plongée profonde dans le regex axé à l'Unicode en PHP Le modificateur «U» Unleashed: une plongée profonde dans le regex axé à l'Unicode en PHP Aug 03, 2025 am 06:39 AM

Theumodifierinphpregexissentialforproperutf-8andunicodesupport.1.itenSureShepatterNandInputStringaTereatEdasutf-8, empêchant la non-interprétation de multi-bytecharacters.2.

Au-delà des captures numériques: tirant parti des groupes nommés dans `preg_match` et` preg_replace` Au-delà des captures numériques: tirant parti des groupes nommés dans `preg_match` et` preg_replace` Aug 04, 2025 pm 03:44 PM

NamedCaptureGroupSInPhPProvideAlearandmainableablewaytoextractmatchedTextByAssigningMeaningFulNamesInSteadofrelyingonNumeRICS.1.User (? Pattern) ou ('name'pattern) syntoxodeFineNamedGroupSInpcre.20

Création d'un analyseur de fichier journal robuste avec `preg_match_all` de PHP Création d'un analyseur de fichier journal robuste avec `preg_match_all` de PHP Aug 03, 2025 am 09:20 AM

Utilisez la fonction preg_match_all pour coopérer avec les expressions régulières pour analyser efficacement les fichiers journaux PHP. 1. Analysez d'abord le format logarithmique tel que le CLF d'Apache; 2. Construisez un modèle régulier avec des groupes de capture nommés pour extraire IP, méthodes, chemins et autres champs; 3. Utilisez PREG_MATCH_ALL pour coopérer avec l'indicateur Preg_Set_Order pour analyser les journaux multi-lignes en lots; 4. Gire les cas de bord tels que les champs manquants ou les journaux de rangs transversaux; 5. Vérifiez et tapez convertir les données extraites et enfin convertir les journaux non structurés en données de tableau structurées pour un traitement ultérieur.

Maîtrise des lookaheads et lookbehinds pour des affirmations de cordes complexes Maîtrise des lookaheads et lookbehinds pour des affirmations de cordes complexes Aug 04, 2025 am 06:35 AM

Affirmation positive (? = ...), affirmation négative (?! ...), assertion positive (??

Modèles récursifs en PCRE pour analyser les structures imbriquées Modèles récursifs en PCRE pour analyser les structures imbriquées Aug 11, 2025 am 11:06 AM

PCRE'sRecursivePatternSenablemAccatrestrestStuctures likeparenthesesorbracketsusing (? R) ornamedreferenceslike (? & Name), permettant à la recherche de chair de forme;

Taming the Beast: atténuer le retour en arrière catastrophique dans le PCRE Taming the Beast: atténuer le retour en arrière catastrophique dans le PCRE Aug 03, 2025 am 07:17 AM

CatastrophicBackTrackingingoCcurSwhenSesSedSGreedyquantificairescauseexponentialBackTrackingonfailedmatches, Asin ^ (a) $ contre "aaaax" .2.USEATOMICGROUPS (?> (...)) ORPSESSESSIVEQUANTIFIERS (par exemple, a) TopRebackTrackingIntoalReadaReyPartifiers.3.

Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace Sécuriser votre application: prévenir les attaques redos avec un rege exercé efficace Aug 13, 2025 pm 03:17 PM

RedosattacksexploitinefficientregexpatternStocauseseNialofServiceViaExcessiveCpuuse.1.AvoidNestedquantifiants like (a) bysimpliveytoa .2.USEATOMICGROUPS (?> ...)

Appliquer des matchs infaillibles: la puissance du regroupement atomique en PHP Appliquer des matchs infaillibles: la puissance du regroupement atomique en PHP Aug 03, 2025 pm 02:17 PM

AtomicGroupSinphPPreventbacktrackingwithinAmatchedSubpattern, assurant la tâche et la permission

See all articles