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

WBOY
Libérer: 2023-08-10 18:50:01
original
1291 Les gens l'ont consulté

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.

  1. Principe d'attaque CSRF

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. Stratégie de défense

(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";
}
Copier après la connexion
Copier après la connexion

(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";
}
Copier après la connexion
Copier après la connexion

(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. Méthode d'implémentation

(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";
}
Copier après la connexion
Copier après la connexion

(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";
}
Copier après la connexion
Copier après la connexion
  1. Résumé

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal