Avec le développement continu de la technologie du réseau, les risques de sécurité du réseau ont également augmenté. Les attaques de contrefaçon de demande de site transversal (CSRF) sont devenues l'une des principales menaces auxquelles sont confrontés les applications Internet actuelles. Cet article présentera les principes de base des attaques du CSRF, ainsi que des méthodes de défense couramment utilisées, et expliquera davantage ses méthodes de mise en œuvre et attachent des exemples de code pertinents.
Les attaques CSRF utilisent la session authentifiée de l'utilisateur pour effectuer des opérations malveillantes. L'attaquant incite l'utilisateur à cliquer sur des liens malveillants ou à visiter des sites Web malveillants, les obligeant à envoyer de fausses demandes à l'insu de la victime. Lorsque l'utilisateur se connecte et s'authentifie avec succès sur un site Web de confiance, le navigateur transportera automatiquement les informations d'identité correspondantes lors de l'envoi de la demande, ce qui permettra à l'attaquant d'identifier l'utilisateur pour envoyer la demande et effectuer des opérations malveillantes.
La détection de l'homologie est l'une des méthodes courantes pour se défendre contre les attaques du CSRF. Il juge la légitimité de la demande en comparant si l'adresse source et cible de la demande appartiennent au même nom de domaine. La vérification est effectuée du côté du serveur, et si le nom de domaine source et le nom de domaine cible sont incohérents, la demande est rejetée.
@Requestmapping ("/ transfert") Public String TransferMoney (HttpServLetRequest Request) { String Origin = request.GetHeader ("référer"); String Target = request.getServerName (); if (! origin.equals (cible)) { retourner "demande illégale"; } // Traitement de la logique commerciale ... retourner "transfert réussi"; }
L'ajout de jeton CSRF est également l'une des méthodes de défense couramment utilisées. Lorsque le serveur renvoie la page HTML, il génère un jeton unique et l'intégre dans le formulaire ou l'envoie au client sous forme de cookie. Lors de la soumission du formulaire, envoyez le jeton côté serveur. Le serveur vérifie que le jeton correspond, et s'il ne correspond pas, la demande est rejetée.
@Requestmapping ("/ transfert") Public String TransferMoney (HttpServLetRequest Request, @RequestParam ("csrftoken") String csrftoken) { HttpSession session = request.getSession (); String storedToken = (String) session.getAttribute ("csrftoken"); if (! csrftoken.equals (storedToken)) { retourner "jeton non valide"; } // Traitement de la logique commerciale ... retourner "transfert réussi"; }
Les demandes asynchrones utilisent des technologies telles que AJAX pour envoyer des demandes au serveur sans rafraîchir la page, ce qui rend difficile l'arrêt des attaques CSRF. Par conséquent, pour les demandes impliquant des opérations sensibles, il est préférable d'utiliser des demandes synchrones pour permettre une session plus fiable à établir avec le serveur.
Dans le service backend, en obtenant le champ référent de l'en-tête de demande, il est déterminé si la demande est légale en fonction de la logique d'arrière-plan. Si la source de demande est incompatible avec l'objectif, la demande est rejetée.
@Requestmapping ("/ transfert") Public String TransferMoney (HttpServLetRequest Request) { String Origin = request.GetHeader ("référer"); String Target = request.getServerName (); if (! origin.equals (cible)) { retourner "demande illégale"; } // Traitement de la logique commerciale ... retourner "transfert réussi"; }
Lors de l'envoi de pages HTML à l'avant, un jeton unique est généré et intégré dans le formulaire ou envoyé au client sous forme de cookie. Lorsque le front-end soumet la demande, il envoie le jeton au serveur. Le serveur vérifie si le jeton correspond et juge la légitimité de la demande.
@Requestmapping ("/ transfert") Public String TransferMoney (HttpServLetRequest Request, @RequestParam ("csrftoken") String csrftoken) { HttpSession session = request.getSession (); String storedToken = (String) session.getAttribute ("csrftoken"); if (! csrftoken.equals (storedToken)) { retourner "jeton non valide"; } // Traitement de la logique commerciale ... retourner "transfert réussi"; }
Les attaques du CSRF sont un moyen d'attaque commun et nuisible, mais certaines stratégies de défense efficaces peuvent améliorer la sécurité de votre application. Cet article présente deux méthodes de défense couramment utilisées, la détection homologue et l'ajout de jetons CSRF, et fournit également un exemple de code pour la méthode d'implémentation. Lors de l'élaboration d'applications, nous devons sélectionner les politiques de défense appropriées en fonction de circonstances spécifiques et les mettre en œuvre correctement pour assurer la sécurité des données utilisateur.