Unter dem Sicherheitsschutz von Webanwendungen ist die CSRF (Cross-Site Request Forgery (CSRF) eine der häufigsten und am häufigsten betroffenen Angriffsmethoden. Obwohl moderne Rahmenbedingungen normalerweise CSRF -Schutzmechanismen integrieren, müssen Schutzrichtlinien für Systeme, die mit nativem PHP entwickelt wurden, manuell implementiert werden. In diesem Artikel wird untersucht, wie die Konsistenz und Sicherheit von Sitzungen in der CSRF -Verteidigung mit Hilfe der Funktion Session_register_Shutdown () in PHP verbessert werden kann.
CSRF-Angriffe (Cross-Site-Anfrage) sind, wenn ein Angreifer einen Benutzer induziert, der sich auf einer vertrauenswürdigen Website angemeldet hat, um unbeabsichtigte Anfragen an die Website zu senden, ohne dies zu wissen. Dies kann dazu führen, dass Sicherheitsprobleme wie Benutzerdaten manipuliert und sensible Vorgänge ausgelöst werden.
Gemeinsame Verteidigungsmethoden umfassen:
Verwenden Sie CSRF -Token und überprüfen Sie
Überprüfen Sie den Referer- oder Origin -Header
Einschränken Sie die Anforderungsmethoden (z. B. erzwungene Post)
Setzen Sie das Samesit Cookie -Attribut
Ein wichtiger Punkt der CSRF -Verteidigung wird jedoch häufig übersehen: die Konsistenzkontrolle des Sitzungszustands. Zu diesem Zeitpunkt kann die Funktion Session_register_Shutdown () eine einzigartige Rolle spielen.
Session_register_Shutdown () ist eine in PHP 5.4 eingeführte Funktion, um die Sitzung automatisch zu schließen, wenn die Skriptausführung endet. Dies ähnelt dem traditionellen Session_Write_Close () , ist jedoch sicherer und zuverlässiger. Es stellt sicher, dass die Sitzungsdaten am Ende des Skriptlebenszyklus automatisch geschrieben und geschlossen werden und Probleme vermeiden, dass Sitzungsdaten in außergewöhnlichen Situationen nicht gespeichert oder überschrieben werden.
Die Gefahr von CSRF -Angriffen ist größtenteils auf die Fähigkeit eines Angreifers zurückzuführen, sensible Vorgänge mithilfe der vorhandenen Sitzungen des Benutzers auszuführen. Wenn die Sitzungsdaten durch böswillige Skripte oder mehrere gleichzeitige Anfragen beschädigt werden, kann der Abwehrmechanismus umgangen werden.
Durch die Verwendung von Session_register_Shutdown () können Sie sicherstellen, dass sie sicherstellen:
Sitzungsatomizität : Verhindern Sie Sitzungsdatenrennen durch die gleichzeitige Ausführung mehrerer Anforderungen.
Verhindern Sie, dass CSRF -Token verliert : Stellen Sie das Schreiben der Sitzung vor dem Skriptabschluss und logischen Sprüngen (z. B. Header -Umleitung) sicher, wodurch die Zuverlässigkeit von CSRF -Token gewährleistet ist.
Verbessern Sie die Stabilität der Token -Rotation : Stellen Sie sicher, dass die Sitzungsdaten während des Token -Update -Prozesses nicht beschädigt werden, und verbessern Sie die Aktualitätskontrollfähigkeit des Tokens.
Nehmen wir an, Sie verwenden den CSRF -Token -Mechanismus auf einer Submission -Seite mit Session_register_Shutdown () zur Stärkung:
<?php
session_start();
session_register_shutdown();
// Initialisieren oder überprüfen CSRF Token
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'] ?? '')) {
die('CSRF Überprüfung fehlgeschlagen');
}
// Prozessformdaten
// ...
}
// Form erzeugen
?>
<form method="POST" action="https://m66.net/form-handler.php">
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token']); ?>">
<input type="text" name="data">
<input type="submit" value="einreichen">
</form>
In diesem Beispiel kann die Sitzung am Ende des Skripts weiterhin korrekt gespeichert werden, auch wenn Exit () , Die () oder HTTP -Jump -Anweisung in der Mitte des Code angezeigt werden, da Session_register_Shutdown () registriert ist. Auf diese Weise ist die Wirksamkeit von CSRF -Token in der logischen Verarbeitung garantiert.
Obwohl Session_register_Shutdown () keine Funktion für die CSRF -Verteidigung ist, bietet es in der sicheren Programmierpraxis eine Möglichkeit, Sitzungsdaten stabil zu schreiben, wodurch die Zuverlässigkeit des CSRF -Token -Mechanismus indirekt verbessert wird. Insbesondere in Webanwendungen, in denen komplexe Interaktionen wie mehrere Weiterleitungen, Ausnahmeabbruch und gleichzeitige Anforderungen nicht ignoriert werden können.
Auf diese Weise erreichen wir nicht nur eine sicherere Sitzungskontrolle, sondern bieten auch eine solide Unterstützung für die CSRF -Verteidigungsfunktionen der CSRF -Anwendung. Die Verwendung von PHP -nativen Mechanismus zur Erreichung des Sicherheitsschutzes ist ein wichtiger Schritt zur Verbesserung der Anwendungssicherheit.