Bei Internetanwendungen waren Sicherheitsaspekte schon immer ein wichtiges Thema. Unter diesen ist der Cross-Site Request Forgery (CSRF)-Angriff eine häufige Schwachstelle, die von Angreifern leicht ausgenutzt werden kann. Wie implementiert man also sichere Programmierung in der PHP-Entwicklung? Dieser Artikel konzentriert sich auf CSRF-Angriffe und Verteidigungslösungen.
1. Was ist ein CSRF-Angriff?
CSRF-Angriff, Cross-Site Request Forgery, ist eine Angriffsmethode, die den Anmeldestatus des Opfers nutzt, um ohne Wissen des Opfers böswillige Anfragen an die Zielwebsite zu senden. Ein Angreifer kann auf verschiedene Weise den Anmeldestatus des Opfers ermitteln und dann unbemerkt eine gefälschte Anfrage an die Zielwebsite initiieren und so den Angriff ausführen. Der Angreifer kann das Opfer zu Operationen verleiten, indem er dem Opfer den Besuch einer Website eines Drittanbieters ermöglicht, über Links in E-Mails oder Chat-Software oder durch das Posten von Links in sozialen Netzwerken und so den Angriff auslöst.
Im folgenden Beispiel kann ein Angreifer das Opfer eine bösartige Website besuchen lassen, eine POST-Anfrage generieren, diese als Anfrage von der Zielwebsite tarnen und die Berechtigungen des Opfers einholen, wenn es angemeldet ist, d. h. senden ein Kommentar:
<form action="https://www.targetwebsite.com/comment" method="post"> <input type="hidden" name="comment" value="harmful comment" /> <input type="submit" value="Submit Comment" /> </form> <script> document.forms[0].submit(); </script>
Dieser Angriff Die Methode ist sehr verdeckt, da der Angreifer die Zielwebsite nicht direkt angreift, sondern die Schwachstellen der Zielwebsite ausnutzt, um den Angriff durchzuführen. Da das Opfer sich dessen nicht bewusst ist, ist es schwierig, den Angriff zu erkennen. Wenn die Zielwebsite CSRF-Angriffe nicht verhindern kann, kann dies zu Datenlecks, böswilligen Vorgängen und anderen Risiken führen.
2. Wie kann man sich gegen CSRF verteidigen?
Wie kann man sich dagegen verteidigen, da CSRF-Angriffe so gefährlich sind? Im Folgenden sind einige gängige Verteidigungsstrategien aufgeführt:
1. Token-Verifizierung hinzufügen
Wenn sich der Benutzer anmeldet, generiert der Backend-Server einen Token und sendet ihn an das Front-End zurück und speichert den Token bei nachfolgenden Interaktionen mit Der Server. Das Front-End muss das Token mit der Anforderung zum Server bringen. Der Server kann durch Token-Verifizierung feststellen, ob die Anfrage legitim ist.
Hier ist ein einfaches Codebeispiel:
<!-- 后端代码 --> <?php session_start(); if(!isset($_SESSION['token'])){ $_SESSION['token'] = md5(uniqid(rand(), true)); } $token = $_SESSION['token']; ?> <!-- 前端代码 --> <form method="post" action="/some/url"> <?php echo "<input type='hidden' name='token' value='".$token."' />"; ?> <input type="text" name="username" /> <input type="text" name="password" /> <input type="submit" value="Submit" /> </form>
In diesem Beispiel generieren wir im Hintergrund einen zufälligen Token und geben ihn an das Frontend zurück. Als nächstes wird das Token an das ausgeblendete Eingabe-Tag angehängt. Wenn das Front-End eine Anfrage sendet, wird auch das Token übermittelt, und der Code auf dem Server überprüft anhand des übermittelten Tokens, ob die Anfrage legal ist.
2. Referrer-Überprüfung hinzufügen
Referer ist Teil des HTTP-Headers, der die Seite enthält, von der der Benutzer auf die aktuelle Seite weitergeleitet wurde. Durch die Überprüfung des Referers im HTTP-Header kann der Server feststellen, ob die Anfrage von einer legitimen Seite stammt. Wenn festgestellt wird, dass der Referrer falsch ist, weigert sich der Server, auf die Anfrage zu antworten.
Hier ist ein einfaches Codebeispiel:
<?php $referer = $_SERVER['HTTP_REFERER']; if(parse_url($referer, PHP_URL_HOST) != 'www.validwebsite.com') { die("Invalid Referer"); } // 处理正常的请求 ?>
In diesem Beispiel erhalten wir den Referer im HTTP-Header und prüfen, ob die Anfrage von einer Website namens „www.validwebsite.com“ kommt. Wenn die Anfrage nicht von dieser Website stammt, lehnt der Server die Antwort ab und zeigt die Meldung „Ungültiger Referrer“ an.
3. Browser-Cookies hinzufügen
Cookie-basierter CSRF-Angriff ist eine Angriffsmethode, die den Anmeldestatus des Benutzers verwendet und das Cookie des Benutzers an die Website des Angreifers sendet. Wir können dies erreichen, indem wir ein kurzlebiges Cookie für eine sensible Seite setzen und dann prüfen, ob das Cookie vorhanden ist, wenn wir Aktionen im Zusammenhang mit dieser Seite durchführen.
Hier ist ein einfaches Codebeispiel:
header('Set-Cookie: csrf_cookie=' . uniqid(rand(), true) . '; path=/; HttpOnly');
In diesem Beispiel generieren wir ein zufälliges csrf_cookie und setzen es auf HttpOnly, was bedeutet, dass das Cookie nur über das HTTP-Protokoll übertragen werden kann und nicht über JavaScript aufgerufen werden kann. Wenn die Anfrage den Server erreicht, können wir prüfen, ob sein Cookie mit dieser Seite übereinstimmt, und so einen möglichen Angriff identifizieren.
Zusammenfassung
Der CSRF-Angriff ist eine sehr gefährliche Angriffsmethode. Die Abwehr von CSRF-Angriffen trägt nicht nur zum Schutz der Datensicherheit bei, sondern ist auch eine Grundvoraussetzung für die Umsetzung sicherer Programmierung. In der PHP-Entwicklungsumgebung können wir einige Maßnahmen ergreifen, um CSRF-Angriffe zu verhindern, z. B. das Festlegen einer Token-Überprüfung, einer Referrer-Überprüfung, das Hinzufügen von Browser-Cookies usw. Durch diese Maßnahmen können wir den Anmeldestatus der Benutzer und Seiten mit sensiblen Daten wirksam vor Angriffen schützen.
Das obige ist der detaillierte Inhalt vonPHP implementiert sichere Programmierung: CSRF-Angriff und -Verteidigung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!