Maison >Périphériques technologiques >Industrie informatique >Comment empêcher les attaques de rediffusion sur votre site Web

Comment empêcher les attaques de rediffusion sur votre site Web

Jennifer Aniston
Jennifer Anistonoriginal
2025-02-18 10:39:14910parcourir

Foutre contre les attaques de relecture: une approche facile à token moyen

Les attaques de rediffusion, dans lesquelles les attaquants interceptent et remandent les paquets de réseau qui ne leur appartiennent pas, sont extrêmement dangereux et causent parfois même de graves dommages. Même sur les canaux de communication chiffrés, un attaquant peut lancer de telles attaques sans accès à la clé de décryptage. Un attaquant écoute simplement sur vos lignes et comprend grossièrement les tâches effectuées par un ensemble particulier de paquets, puis en rendant ces paquets ou des demandes, peut interrompre votre communication ou causer des dégâts plus graves.

Cet article introduira une méthode de base simple et facile à utiliser pour empêcher les sites Web d'être soumis à des attaques de relecture. Il empêche également les utilisateurs de répéter de répéter de manière répétitive la dernière demande de poste pendant le mauvais moment.

C'est loin d'être une solution complète. Il a des défauts et des problèmes à résoudre, mais il vous donne une idée approximative de la façon dont les jetons et les protocoles simples peuvent améliorer la sécurité du site Web. Un exemple de code et d'implémentation sont effectués en utilisant ASP.NET et C #, mais le concept peut être déployé sur toute autre plate-forme ou langage de programmation.

Concept de jeton unique

L'idée principale de la solution fournie dans cet article est de lier chaque réponse HTTP à une chaîne de jeton qui n'est valable que pour la demande de post suivante. Voici une ventilation simple des étapes impliquées:

  1. Le client fait une demande Get en tapant l'URL ou la page ou en cliquant sur un lien.
  2. Le serveur génère un jeton aléatoire. Il stocke ensuite une copie du jeton dans la session et intégre la copie du jeton dans la balise <input type="hidden"> de la réponse envoyée au client.
  3. Le client traite le contenu et envoie une demande de message au serveur lorsque l'utilisateur clique sur un bouton contenant le jeton généré au hasard.
  4. Le serveur reçoit la demande et continue de le traiter uniquement lorsque le jeton attaché est égal au jeton stocké dans la session utilisateur.
  5. Le serveur invalide le jeton et revient à l'étape 2, dans laquelle il formule la réponse à l'aide du nouveau jeton aléatoire.

De cette manière, même si un utilisateur malveillant intercepte une demande critique envoyée au serveur, la demande ne peut pas être répétée car le jeton contenu dans la demande ne sera plus valide après avoir été envoyé au serveur. Il en va de même pour les utilisateurs imprudents qui appuient à tort sur la touche F5 et renvoient la demande après avoir publié des informations sur le serveur.

Test Environment

Pour implémenter le concept d'un jeton unique, nous créerons un exemple de page avec une zone de texte simple et un bouton de soumission. Nous ajouterons également un contrôle de balise pour afficher la sortie de test.

How to Prevent Replay Attacks on Your Website

Le code d'arrière-plan sera un extrait simple affichant le temps de soumission plus les données contenues dans la zone de texte.

How to Prevent Replay Attacks on Your Website

Il s'agit de la sortie de la page après la demande initiale de la demande:

How to Prevent Replay Attacks on Your Website

Après avoir soumis la page, la sortie ressemblera à ceci:

How to Prevent Replay Attacks on Your Website

Le problème est que si vous actualisez la page, il republiera vos données et répétera la dernière demande, le serveur le gérera sans aucun problème. Imaginez maintenant si vous venez de faire une clé de 1 000 000 $ et appuyé accidentellement sur la touche F5 de votre clavier. Ou pire, certains utilisateurs malveillants interceptent votre demande, constatez qu'il s'agit d'une transaction de paiement et répétez-la pour voler vos fonds et riposter contre vous.

How to Prevent Replay Attacks on Your Website

Solution

Pour empêcher les demandes de publication en double, nous mettons à jour la balise pour ajouter un champ caché qui stockera le jeton.

How to Prevent Replay Attacks on Your Website

Ensuite, nous créerons une fonction qui génère un jeton aléatoire et l'intégre à la fois dans les champs cachés et la collection de session.

How to Prevent Replay Attacks on Your Website

Après

, nous modifierons la fonction page_load () afin que les données publiées ne soient affichées que si le jeton publié est égal au jeton stocké dans la session.

How to Prevent Replay Attacks on Your Website

Enfin, nous remplacerons la fonction onPrerender () pour générer un nouveau jeton avant l'envoi de la sortie finale au client. C'est ce qui en fait un jeton unique, car il se met à jour chaque fois qu'une nouvelle demande est envoyée.

How to Prevent Replay Attacks on Your Website

Maintenant, lorsque vous cliquez sur le bouton pour soumettre le formulaire, cela fonctionne de la même manière qu'auparavant. Cependant, si vous essayez de simuler une attaque de relecture en rafraîchissant la page, vous recevrez l'erreur suivante car le jeton envoyé avec le formulaire n'est plus égal au jeton stocké sur le serveur:

How to Prevent Replay Attacks on Your Website

De cette manière, nous pouvons distinguer les soumissions de clics de bouton valides et les demandes répétées par erreur.

Améliorer le code

Bien que ce code résout le problème d'attaque de relecture de la page, il a encore des problèmes qui doivent être résolus:

  • Il doit être répété sur toutes les pages
  • Si vous avez plusieurs onglets sur le même site Web, cela ne fonctionnera pas car les jetons sont partagés entre les demandes
  • c'est très moche

En tant que passionné de programmation (OOP) axée sur des objets (OOP), j'ai cherché des opportunités pour tirer parti de la puissance de ce meilleur paradigme de programmation pour refacter et améliorer le code.

Pour résoudre le problème ci-dessus, la première chose que nous devons faire est de définir une classe qui résumera la fonction de génération de jetons. Nous nommons la classe TokeniszedPage et la dérivons de System.web.ui.page afin que nous puissions l'utiliser pour des pages à l'avenir.

How to Prevent Replay Attacks on Your Website

Ensuite, pour rendre le code plus facile à lire et à gérer, nous encapsulons le jeton de page et le jeton de session en deux propriétés différentes ajoutées à la classe de tokenisé. Pour rendre le code facile à porter dans les pages Web, nous utiliserons la collection ViewState au lieu de cacher le champ de saisie pour stocker le jeton de page. Nous utilisons également la propriété Page.Title comme clé pour stocker le jeton dans la session. Cela améliorera notre code et résoudra partiellement le deuxième problème qui limitera l'utilisation de notre site Web à un seul onglet du navigateur. En appliquant ce changement, nous pourrons ouvrir différentes pages du site Web dans différents onglets, mais nous ne pourrons pas ouvrir plusieurs instances de la même page dans des onglets distincts, car ils partagent toujours le jeton. Ce problème sera résolu plus tard.

How to Prevent Replay Attacks on Your Website

Ensuite, nous ajoutons une propriété booléenne en lecture seule appelée IstokenValid, qui suit des exemples d'autres propriétés de page telles que IsPostback et Isvalid. Le but de cette propriété est de s'assurer que le jeton de page est égal au jeton de session.

How to Prevent Replay Attacks on Your Website

Enfin, nous ajoutons le remplacement de la fonction génératerandomtoken () et de l'événement onPrerender (), tout comme il le fait dans l'environnement de test.

How to Prevent Replay Attacks on Your Website

Maintenant, afin d'utiliser le mode de jeton unique, nous avons juste besoin de créer une nouvelle page, de le dériver de la page de tokenisée et d'utiliser IstokenValid lorsqu'un jeton unique est nécessaire.

How to Prevent Replay Attacks on Your Website

C'est beaucoup mieux.

Rendez-le meilleur

Un problème avec ce code est que si vous avez deux onglets dans votre navigateur pointant vers la même page, la publication d'un onglet invalidera les jetons de l'autre onglet car ils utilisent la même clé de jeton de session. Cela peut être résolu en ajoutant l'ID de jeton, qui garantira que chaque séquence de demande de réponse qui se produit dans un seul onglet utilise son propre ensemble de jetons uniques et n'interfère pas avec d'autres demandes sur la même page. La première chose à faire est de retourner la classe TokeniszedPage et d'ajouter la propriété TokenId. Cette propriété génère un ID aléatoire lorsqu'il est appelé dans la demande de GET initiale pour la première fois et le stocke dans la collection ViewState pour une réutilisation future.

How to Prevent Replay Attacks on Your Website

Ensuite, nous modifierons la propriété SessionHidDentoken pour utiliser la propriété TokenId au lieu d'utiliser la propriété Page.Title.

How to Prevent Replay Attacks on Your Website

La chose merveilleuse est que puisque nous utilisons les principes d'abstraction et d'encapsulation (merci encore pour les avantages de la POO), nous n'avons pas besoin de faire d'autres changements, et le nouveau mécanisme fonctionnera avec toutes les pages dont nous avons tiré Page à tokenisé.

Questions restantes

C'est ce qu'il s'agit du mode de jeton unique. Il reste deux questions:

  • Pour chaque session (plus précisément, le nombre de demandes de GET envoyés à chaque session), un nombre illimité d'ID de jeton sera généré. Cela peut être résolu en mettant en œuvre un mécanisme de pile ou de cache qui apparaît des ID plus anciens lorsqu'ils dépassent une limite de quantité ou ne sont pas utilisés pour une durée spécifique. Je vais vous laisser la mise en œuvre.
  • Le générateur de nombres aléatoires par défaut n'est pas la source d'aléatoire la plus sûre et la plus fiable que vous l'appelez, et un pirate avisé peut être en mesure de prédire les séquences de jetons. Cependant, si vous utilisez le cryptage SSL, ils ne peuvent pas obtenir le jeton de toute façon.

avez-vous des améliorations à ajouter ou souhaitez partager leur implémentation dans d'autres plateformes et langages de programmation? Veuillez laisser un message dans la section des commentaires ci-dessous.

FAQ sur la prévention des attaques de relecture du site Web (FAQ)

Qu'est-ce qu'une attaque de relecture et comment ça marche?

L'attaque de relecture est une forme de cyberattaque dans laquelle la transmission efficace des données est répétée ou retardée de manière malveillante ou frauduleuse. Un attaquant le fait en interceptant et en retransmettant les données, ce qui peut faire partie d'une attaque masquée via le remplacement des paquets IP. Cela constitue une menace sérieuse pour la sécurité des communications et des données.

Comment détecter les attaques de relecture?

La détection des attaques de relecture peut être difficile car les données transmises sont valides et initialement envoyées par un utilisateur autorisé. Cependant, il existe des signes selon lesquels les attaques de relecture peuvent être montrées. Il s'agit notamment de noter le retard de transmission en double ou de transmission de données. De plus, la mise en œuvre de mesures de sécurité telles que les horodatages et les numéros de série peut aider à détecter les attaques de relecture.

Quelles sont les conséquences de l'attaque de relecture?

Les conséquences d'une attaque de rediffusion peuvent être graves, selon la nature des données interceptées. Cela peut entraîner un accès non autorisé à des informations sensibles, des transactions frauduleuses et même des violations des systèmes de sécurité. Cela peut entraîner des pertes financières, des dommages de réputation et un impact juridique potentiel.

Comment empêcher mon site Web d'être rejoué?

Il existe plusieurs stratégies pour empêcher les attaques de rediffusion. Il s'agit notamment de l'utilisation de protocoles de communication sécurisés (tels que SSL ou TLS), la mise en œuvre des horodatages ou des numéros de série, et l'utilisation de mots de passe uniques ou de nombres aléatoires. De plus, la surveillance et l'audit régulièrement de votre trafic réseau peuvent aider à détecter et à prévenir les attaques de relecture.

Qu'est-ce qu'un nombre aléatoire et comment empêche-t-il les attaques de relecture?

Le nombre aléatoire est un nombre aléatoire ou pseudo-aléatoire qui n'est utilisé qu'une seule fois dans une session de communication. Il empêche les attaques de lecture en s'assurant que chaque transfert de données est unique, même si les mêmes données sont envoyées plusieurs fois. Cela empêche l'attaquant de rejouer la transmission des données avec succès.

Comment empêcher les attaques de relecture de SSL ou TLS?

SSL (Secure Sockets Layer) et TLS (Transport Layer Security) sont des protocoles de chiffrement qui fournissent une communication sécurisée du réseau. Ils empêchent les attaques de relecture en chiffrant les données transmises et en utilisant une combinaison de nombres de séquence et d'horodatage pour assurer l'unicité de chaque transmission de données.

Quel rôle joue l'horodatage dans la prévention des attaques de relecture?

Les horodatages peuvent jouer un rôle clé dans la prévention des attaques de relecture. En ajoutant un horodatage à chaque transfert de données, vous pouvez vous assurer que chaque transfert est unique et ne peut pas être joué avec succès. Si une transmission de lecture est détectée, elle peut être facilement identifiée et jetée en fonction de l'horodatage.

l'attaque de rediffusion peut-elle être effectuée sur n'importe quel site Web?

Oui, les attaques de relecture peuvent être menées sur n'importe quel site Web sans mesures de sécurité appropriées. Cependant, les sites Web qui transmettent des informations sensibles, telles que les données financières ou les informations personnelles, sont particulièrement vulnérables aux attaques.

La relecture est-elle commune?

Bien que cela ne soit pas aussi courant que certains autres types de cyberattaques, les attaques de relecture se produisent et peuvent avoir de graves conséquences. Par conséquent, il est très important de prendre des mesures pour les empêcher.

Quelles sont les meilleures pratiques pour prévenir les attaques de relecture?

Certaines meilleures pratiques pour empêcher les attaques de rediffusion comprennent l'utilisation de protocoles de communication sécurisés, l'application des horodatages ou des numéros de série, en utilisant des mots de passe ou des nombres aléatoires, ainsi que une surveillance périodique et une audit de votre trafic réseau. De plus, l'éducation de vos utilisateurs sur l'importance de la sécurité et les encourager à utiliser des mots de passe sécurisés peut également aider à prévenir les attaques de relecture.

Cette sortie révisée maintient la signification d'origine tout en utilisant différentes structures de libellé et de phrases.

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:
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