Heim >Backend-Entwicklung >PHP-Tutorial >CSRF-Angriffsabwehrstrategien und Implementierungsmethoden
CSRF-Angriffsabwehrstrategien und Implementierungsmethoden
Mit der kontinuierlichen Weiterentwicklung der Netzwerktechnologie haben auch die Netzwerksicherheitsrisiken zugenommen. Cross-Site-Request-Forgery-Angriffe (CSRF) sind zu einer der größten Bedrohungen für aktuelle Internetanwendungen geworden. In diesem Artikel werden die Grundprinzipien von CSRF-Angriffen sowie häufig verwendete Verteidigungsmethoden vorgestellt und ihre Implementierungsmethoden anhand relevanter Codebeispiele näher erläutert.
Der CSRF-Angriff nutzt die authentifizierte Sitzung des Benutzers, um böswillige Vorgänge auszuführen. Angreifer verleiten Benutzer dazu, auf schädliche Links zu klicken oder schädliche Websites zu besuchen, was dazu führt, dass sie ohne Wissen des Opfers gefälschte Anfragen senden. Wenn sich ein Benutzer bei einer vertrauenswürdigen Website anmeldet und erfolgreich authentifiziert wird, übermittelt der Browser beim Senden einer Anfrage automatisch die entsprechenden Identitätsanmeldeinformationen, sodass ein Angreifer sich als Benutzer ausgeben und Anfragen zur Durchführung böswilliger Vorgänge senden kann.
(1) Erkennung des gleichen Ursprungs
Die Erkennung des ursprünglichen Ursprungs ist eines der gängigen Mittel zur Abwehr von CSRF-Angriffen. Sie bestimmt die Legitimität der Anfrage, indem sie vergleicht, ob die Quell- und Zieladresse der Anfrage dazugehören auf denselben Domainnamen. Die Überprüfung erfolgt auf der Serverseite. Wenn der Quelldomänenname und der Zieldomänenname inkonsistent sind, wird die Anfrage abgelehnt.
Beispielcode:
@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) CSRF-Token hinzufügen
Das Hinzufügen eines CSRF-Tokens ist ebenfalls eine der am häufigsten verwendeten Verteidigungsmethoden. Wenn der Server die HTML-Seite zurückgibt, generiert er ein eindeutiges Token und bettet es in das Formular ein oder sendet es als Cookie an den Client. Beim Absenden des Formulars wird das Token an den Server gesendet. Der Server überprüft, ob das Token übereinstimmt, und lehnt die Anfrage ab, wenn es nicht übereinstimmt.
Beispielcode:
@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) Synchrone und asynchrone Anfragen
Asynchrone Anfragen nutzen Technologien wie AJAX, um Anfragen an den Server zu senden, ohne die Seite zu aktualisieren, wodurch CSRF-Angriffe schwer zu verhindern sind. Daher ist es für Anfragen mit sensiblen Vorgängen am besten, synchrone Anfragen zu verwenden, damit eine zuverlässigere Sitzung mit dem Server aufgebaut werden kann.
(1) Überprüfen Sie die Anforderungsquelle und fügen Sie die Erkennung gleicher Herkunft hinzu.
Bestimmen Sie im Back-End-Dienst anhand des Referer-Felds des Anforderungsheaders, ob die Anforderung basierend auf dem Hintergrund zulässig ist Logik. Wenn die Anforderungsquelle nicht mit dem Ziel übereinstimmt, wird die Anforderung abgelehnt.
Beispielcode:
@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) CSRF-Token hinzufügen
Generieren Sie beim Senden der HTML-Seite an das Frontend ein eindeutiges Token und betten Sie es in das Formular ein oder senden Sie es als Cookie an den Client. Wenn das Front-End eine Anfrage sendet, sendet es das Token an den Server und der Server überprüft, ob das Token übereinstimmt, um die Legitimität der Anfrage festzustellen.
Beispielcode:
@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"; }
CSRF-Angriff ist eine häufige und schädliche Angriffsmethode, aber die Sicherheit der Anwendung kann durch einige wirksame Verteidigungsstrategien verbessert werden. In diesem Artikel werden zwei gängige Verteidigungsmethoden vorgestellt, nämlich die Ursprungserkennung und das Hinzufügen von CSRF-Token, und außerdem Beispielcode für die Implementierungsmethode bereitgestellt. Bei der Entwicklung von Anwendungen sollten wir auf der Grundlage spezifischer Umstände geeignete Verteidigungsstrategien auswählen und diese korrekt implementieren, um die Sicherheit der Benutzerdaten zu gewährleisten.
Das obige ist der detaillierte Inhalt vonCSRF-Angriffsabwehrstrategien und Implementierungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!