Heim  >  Artikel  >  Backend-Entwicklung  >  CSRF-Angriffsabwehrstrategien und Implementierungsmethoden

CSRF-Angriffsabwehrstrategien und Implementierungsmethoden

WBOY
WBOYOriginal
2023-08-10 18:49:061250Durchsuche

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.

  1. CSRF-Angriffsprinzip

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. Abwehrstrategie

(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. Implementierungsmethode

(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";
}
  1. Zusammenfassung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn