Prévenir les attaques de falsification de requêtes intersites en Java
Ces dernières années, avec le développement rapide d'Internet, les problèmes de sécurité des réseaux sont devenus de plus en plus importants. L'une d'elles est l'attaque Cross-Site Request Forgery (CSRF), qui est une méthode d'attaque qui utilise l'identité de connexion de l'utilisateur pour lancer des requêtes malveillantes. Cet article explique comment empêcher les attaques de falsification de requêtes intersites en Java et donne des exemples de code correspondants.
2.1 Vérifier la source de la requête
Vérifier la source de la requête côté serveur est un moyen courant d'empêcher le CSRF attaques. Nous pouvons déterminer la source de la requête en vérifiant le champ d’en-tête Referer de la requête. Si la demande provient d'une source inattendue, la demande est rejetée.
@RequestMapping(value="/example", method=RequestMethod.POST) public String handleExamplePost(HttpServletRequest request) { String referer = request.getHeader("Referer"); if (referer != null && referer.contains("example.com")) { // 正常处理请求 } else { // 拒绝请求 } }
Il est à noter que certains navigateurs peuvent limiter l'envoi de Referer, cette méthode n'est donc pas absolument fiable.
2.2 Ajouter la vérification des jetons
La vérification des jetons est une méthode courante pour empêcher les attaques CSRF. Générez un jeton unique côté serveur et intégrez le jeton dans la session utilisateur ou dans les paramètres de demande. Lors du traitement d'une requête, le serveur vérifie si la requête contient le bon jeton et n'effectue l'opération correspondante que si la vérification du jeton réussit.
// 生成令牌 String token = UUID.randomUUID().toString(); // 存储令牌到用户会话或请求参数中 session.setAttribute("csrfToken", token); model.addAttribute("csrfToken", token); // 处理请求时进行令牌验证 @RequestMapping(value="/example", method=RequestMethod.POST) public String handleExamplePost(HttpServletRequest request, @RequestParam("csrfToken") String csrfToken) { String sessionToken = (String) session.getAttribute("csrfToken"); if (sessionToken == null || !sessionToken.equals(csrfToken)) { // 拒绝请求 } else { // 正常处理请求 } }
2.3 Activer l'attribut SameSite
La définition de l'attribut SameSite de Cookie peut empêcher efficacement certaines attaques CSRF. L'attribut SameSite restreint l'envoi de cookies sur le même site, empêchant ainsi les attaques de falsification de requêtes intersites. Cette fonctionnalité peut être activée en Java en définissant la propriété SameSite du Cookie sur Strict ou Lax.
Cookie cookie = new Cookie("exampleCookie", "exampleValue"); cookie.setSameSite(Cookie.SameSite.STRICT); response.addCookie(cookie);
Il convient de noter que l'attribut SameSite peut ne pas être pris en charge dans les anciennes versions des navigateurs.
Ci-dessus sont quelques méthodes et exemples de code pour empêcher les attaques de falsification de requêtes intersites en Java. J'espère que cet article pourra aider les lecteurs à mieux prévenir les attaques CSRF et à assurer la sécurité des applications réseau.
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!