Maison >développement back-end >tutoriel php >Stratégies de défense contre les attaques CSRF et méthodes de mise en œuvre
Stratégies de défense contre les attaques CSRF et méthodes de mise en œuvre
Avec le développement continu de la technologie des réseaux, les risques de sécurité des réseaux ont également augmenté. Les attaques de falsification de requêtes intersites (CSRF) sont devenues l'une des menaces majeures auxquelles sont confrontées les applications Internet actuelles. Cet article présentera les principes de base des attaques CSRF, ainsi que les méthodes de défense couramment utilisées, et expliquera plus en détail leurs méthodes de mise en œuvre, avec des exemples de code pertinents.
L'attaque CSRF utilise la session authentifiée de l'utilisateur pour effectuer des opérations malveillantes. Les attaquants incitent les utilisateurs à cliquer sur des liens malveillants ou à visiter des sites Web malveillants, les amenant ainsi à envoyer de fausses requêtes à l'insu de la victime. Lorsqu'un utilisateur se connecte à un site Web de confiance et est authentifié avec succès, le navigateur portera automatiquement les informations d'identification correspondantes lors de l'envoi d'une demande, permettant à un attaquant de se faire passer pour l'utilisateur et d'envoyer des demandes pour effectuer des opérations malveillantes.
(1) Détection de même origine
La détection de l'origine d'origine est l'un des moyens courants de se défendre contre les attaques CSRF. Elle détermine la légitimité de la demande en comparant si l'adresse source et l'adresse cible de la demande appartiennent. au même nom de domaine. La vérification est effectuée côté serveur, et si le nom de domaine source et le nom de domaine cible sont incohérents, la demande est rejetée.
Exemple de code :
@RequestMapping("/transfer") public String transferMoney(HttpServletRequest request) { String origin = request.getHeader("Referer"); String target = request.getServerName(); if(!origin.equals(target)) { return "Illegal Request"; } // 业务逻辑处理... return "Transfer Successful"; }
(2) Ajouter un jeton CSRF
L'ajout d'un 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. Lorsque le formulaire est soumis, le Token est envoyé au serveur. Le serveur vérifie si le jeton correspond et rejette la demande si elle ne correspond pas.
Exemple de code :
@RequestMapping("/transfer") public String transferMoney(HttpServletRequest request, @RequestParam("csrfToken") String csrfToken) { HttpSession session = request.getSession(); String storedToken = (String) session.getAttribute("csrfToken"); if (!csrfToken.equals(storedToken)) { return "Invalid Token"; } // 业务逻辑处理... return "Transfer Successful"; }
(3) Requêtes synchrones et asynchrones
Les requêtes asynchrones utilisent des technologies telles que AJAX pour envoyer des requêtes au serveur sans actualiser la page, ce qui rend les attaques CSRF difficiles à prévenir. Par conséquent, pour les requêtes impliquant des opérations sensibles, il est préférable d’utiliser des requêtes synchrones afin qu’une session plus fiable puisse être établie avec le serveur.
(1) Vérifiez la source de la demande et ajoutez la détection de même origine
Dans le service back-end, en obtenant le champ Referer de l'en-tête de la demande, déterminez si la demande est légale en fonction de la logique de fond. Si la source de la demande est incohérente avec la cible, la demande est rejetée.
Exemple de code :
@RequestMapping("/transfer") public String transferMoney(HttpServletRequest request) { String origin = request.getHeader("Referer"); String target = request.getServerName(); if(!origin.equals(target)) { return "Illegal Request"; } // 业务逻辑处理... return "Transfer Successful"; }
(2) Ajouter un jeton CSRF
Lors de l'envoi de la page HTML au front-end, générez un jeton unique et intégrez-le dans le formulaire ou envoyez-le au client sous forme de cookie. Lorsque le frontal soumet une demande, il envoie le jeton au serveur, et le serveur vérifie si le jeton correspond pour déterminer la légitimité de la demande.
Exemple de code :
@RequestMapping("/transfer") public String transferMoney(HttpServletRequest request, @RequestParam("csrfToken") String csrfToken) { HttpSession session = request.getSession(); String storedToken = (String) session.getAttribute("csrfToken"); if (!csrfToken.equals(storedToken)) { return "Invalid Token"; } // 业务逻辑处理... return "Transfer Successful"; }
L'attaque CSRF est une méthode d'attaque courante et nuisible, mais la sécurité des applications peut être améliorée grâce à certaines stratégies de défense efficaces. Cet article présente deux méthodes de défense couramment utilisées, à savoir la détection de l'origine et l'ajout d'un jeton CSRF, et fournit également un exemple de code pour la méthode d'implémentation. Lors du développement d'applications, nous devons choisir des stratégies de défense appropriées en fonction de circonstances spécifiques et les mettre en œuvre correctement pour garantir la sécurité des données 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!