CSRF-Konzept: CSRF-Cross-Site-Request-Forgery (Cross-Site-Request-Forgery) hat wie XSS-Angriffe großen Schaden. Sie können es so verstehen:
Ein Angreifer stiehlt Ihre Identität und sendet eine böswillige Anfrage in Ihrem Namen. Diese Anfrage ist für den Server völlig legal, führt jedoch einen vom Angreifer erwarteten Vorgang aus, z. B. das Senden von E-Mails und Nachrichten in Ihrem Namen , Ihr Konto stehlen, Systemadministratoren hinzufügen und sogar Waren kaufen, virtuelle Währungen übertragen usw. (Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Kompetenz)
Zum Beispiel: Web A ist eine Website mit CSRF-Schwachstellen, Web B ist eine bösartige Website, die von einem Angreifer erstellt wurde, und Benutzer C ist es Web A. Legitimierte Benutzer der Website.
Abwehr gegen CSRF-Angriffe:
Es gibt derzeit drei Hauptstrategien zur Abwehr von CSRF-Angriffen: Überprüfen des HTTP-Referer-Felds; Hinzufügen eines Tokens zur Anforderungsadresse und überprüfen Sie es; Benutzerdefinierte Attribute im Header und überprüfen Sie.
(1) Überprüfen Sie das HTTP-Referer-Feld
Gemäß dem HTTP-Protokoll gibt es im HTTP-Header ein Feld namens Referer, das die Quelladresse des aufzeichnet HTTP-Anfrage. Unter normalen Umständen kommt die Anfrage zum Zugriff auf eine sichere, eingeschränkte Seite von derselben Website. Wenn Sie beispielsweise auf http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory zugreifen müssen, muss sich der Benutzer zuerst anmelden zu bank.example und gehen Sie dann durch. Klicken Sie auf eine Schaltfläche auf der Seite, um das Übertragungsereignis auszulösen.
Zu diesem Zeitpunkt ist der Referrer-Wert der Übertragungsanfrage die URL der Seite, auf der sich die Übertragungsschaltfläche befindet, normalerweise eine Adresse, die mit dem Domänennamen bank.example beginnt. Wenn ein Hacker einen CSRF-Angriff auf die Website einer Bank durchführen möchte, kann er nur eine Anfrage auf seiner eigenen Website erstellen. Wenn ein Benutzer eine Anfrage über die Website des Hackers an die Bank sendet, verweist der Referrer der Anfrage auf die eigene Website des Hackers .
Um sich gegen CSRF-Angriffe zu schützen, muss die Website der Bank daher nur ihren Referrer-Wert für jede Übertragungsanfrage überprüfen. Wenn es sich um einen Domainnamen handelt, der mit bank.example beginnt, bedeutet dies, dass die Anfrage von der Bank stammt Website selbst. Ja, legal. Handelt es sich bei dem Referrer um eine andere Website, handelt es sich möglicherweise um einen CSRF-Angriff eines Hackers und die Anfrage wird abgelehnt.
(2) Token zur Anforderungsadresse hinzufügen und überprüfen
Der Grund für den Erfolg des CSRF-Angriffs liegt darin, dass der Hacker die Anforderung des Benutzers vollständig fälschen kann Alle Benutzerauthentifizierungsinformationen in der Anfrage sind in Cookies enthalten, sodass Hacker direkt die eigenen Cookies des Benutzers verwenden können, um die Sicherheitsüberprüfung zu bestehen, ohne die Authentifizierungsinformationen zu kennen.
Um CSRF zu widerstehen, besteht der Schlüssel darin, Informationen in die Anfrage einzufügen, die Hacker nicht fälschen können, und diese Informationen sind im Cookie nicht vorhanden.
Sie können ein zufällig generiertes Token als Parameter in der HTTP-Anfrage hinzufügen und auf der Serverseite einen Interceptor erstellen, um das Token zu überprüfen, wenn in der Anfrage kein Token vorhanden ist oder der Token-Inhalt falsch ist Es wird davon ausgegangen, dass die Anforderung möglicherweise aufgrund eines CSRF-Angriffs abgelehnt wurde.
(3) Attribute im HTTP-Header anpassen und überprüfen
Diese Methode verwendet auch Token und führt eine Überprüfung durch, die sich von der vorherigen Methode unterscheidet Ja, Das Token wird nicht in Form eines Parameters in die HTTP-Anfrage eingefügt, sondern in das benutzerdefinierte Attribut im HTTP-Header. Über die XMLHttpRequest-Klasse können Sie das HTTP-Header-Attribut csrftoken allen Anforderungen dieses Typs gleichzeitig hinzufügen und den Token-Wert darin einfügen. Dies beseitigt die Unannehmlichkeiten beim Hinzufügen des Tokens zur Anforderung in der vorherigen Methode. Gleichzeitig wird die über XMLHttpRequest angeforderte Adresse nicht in der Adressleiste des Browsers aufgezeichnet und es besteht kein Grund zur Sorge, dass das Token an andere weitergegeben wird Websites durch den Referrer.
Das obige ist der detaillierte Inhalt vonSo verhindern Sie CSRF-Angriffe in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!