In PHP ist die Sitzungsverwaltung ein wichtiger Bestandteil der Benutzerauthentifizierung und Sicherheit. Durch die Entführung der Sitzungs -ID des Benutzers kann ein Angreifer die Authentifizierung umgehen und direkt auf geschützte Ressourcen zugreifen. Um die Sicherheit der Sitzung zu verbessern, bietet PHP Session_regenerate_id () und setCookie () -Funktionen. Die Verwendung dieser beiden Funktionen kann die Entführungs von Sitzungen effektiv verhindern.
Session Hijacking bezieht sich auf einen Angreifer, der die Sitzungs -ID eines legitimen Benutzers stiehlt und böswillige Aktionen ausführt. Normalerweise erhalten Angreifer Sitzungs -IDs mit verschiedenen Mitteln wie XSS -Angriffen, Diebstahl von Cookies, Netzwerküberwachung usw.
Um eine Entführungs von Sitzungen zu verhindern, müssen wir die Sitzungs -ID zu Beginn jeder Sitzung aktualisieren und Maßnahmen ergreifen, um sicherzustellen, dass die Sitzungs -ID während der Übertragung nicht abgefangen wird. Die Funktionen von Session_regenerate_id () und setCookie () in PHP unterstützen eine starke Unterstützung für das Erreichen dieses Ziels.
Die Funktion von PHPs Session_regenerate_id () kann die aktuelle Sitzungs -ID während einer Sitzung ändern. Dies macht die Sitzungs -ID für jede Sitzung eindeutig. Auch wenn der Angreifer eine alte Sitzungs -ID stiehlt, kann er nicht in nachfolgenden Anfragen verwendet werden. Durch regelmäßiges Aufrufen von Sitzungen_regenerate_id () kann das Risiko einer Sitzung erheblich reduziert werden.
// Starten Sie eine Sitzung
session_start();
// Bei einer Sitzungsanfrage regenerieren Sie SitzungenID
session_regenerate_id(true); // ParametertrueZeigt an, alte Sitzungsdateien zu löschen,Leckagen vermeiden
// Verarbeiten Sie Benutzeranfragen weiterhin
echo "Aktuelle SitzungID:" . session_id();
Im obigen Code aktualisiert Session_regenerate_id (True) die Sitzungs -ID jedes Mal, wenn sie die alte Sitzungsdatei anfordert und löscht. Auf diese Weise kann die Sitzung nicht erneut verwendet werden, selbst wenn der Angreifer die ursprüngliche Sitzungs -ID stiehlt.
Mit der SetCookie () -Funktion werden die Cookies des Browsers eingestellt. Sitzung -IDs werden normalerweise durch Cookies weitergeleitet. Die Sicherheit der Cookies der Sitzungs -ID ist daher der Schlüssel, um eine Entführungs von Sitzungen zu verhindern. Durch Festlegen der HTTPonly- und sicheren Eigenschaften kann das Risiko einer Sitzungs -ID durch Angreifer reduziert werden.
Httponly : Henst, dass JavaScript auf Cookies zugreift und damit XSS -Angriffe mit IDs von Sitzungen stehlen.
Sicher : Senden Sie Cookies nur in HTTPS -Verbindungen, um zu verhindern, dass Sitzungs -ID in einer unsicheren HTTP -Verbindung gestohlen wird.
// Einen Safe einrichtenCookieEigentum
$cookieParams = session_get_cookie_params();
setcookie(
session_name(), // 使用Aktuelle Sitzung的名称
session_id(), // SitzungID
time() + 3600, // aufstellenCookieAblaufzeit
$cookieParams['path'], // CookieDer Weg
$cookieParams['domain'], // CookieDomain -Name
true, // Secure,Stellen Sie sicher, dass Sie nur in verfügbar sind inHTTPSÜbertragung in Verbindung
true // HttpOnly,verhindernJavaScriptZugang
);
Auf diese Weise stellen wir beim Einstellen von Sitzungs Cookies sicher, dass sie sicher sind, und vermeiden Lecks in einer unsicheren Netzwerkumgebung.
Um die Sicherheit der Sitzung zu maximieren, wird empfohlen, Session_regenerate_id () nach jedem Benutzer anzumelden, um die Sitzungs -ID zu ändern und die Funktion "setCookie () zu verwenden, um sicherere Cookie -Optionen festzulegen. Auf diese Weise ist es schwierig, sie für die Sitzung der Sitzung zu verwenden, selbst wenn ein Angreifer in der Lage ist, die Sitzungs -ID abzufangen.
// Starten Sie eine Sitzung
session_start();
// 每次请求时都更新SitzungID,确保Sitzung安全
session_regenerate_id(true);
// Einen Safe einrichtenSitzungCookie
$cookieParams = session_get_cookie_params();
setcookie(
session_name(), // Aktuelle Sitzung的名称
session_id(), // SitzungID
time() + 3600, // aufstellenCookieAblaufzeit
$cookieParams['path'], // CookieDer Weg
$cookieParams['domain'], // CookieDomain -Name
true, // Secure,Stellen Sie sicherHTTPSÜbertragung in Verbindung
true // HttpOnly,verhindernJavaScriptZugang
);
// Verarbeiten Sie Benutzeranfragen weiterhin
echo "Aktuelle SitzungID:" . session_id();
In diesem Beispiel rufen wir zuerst Session_regenerate_id () an, um die Sitzungs -ID zu ändern, und verwenden dann SetCookie () , um sichere Cookies festzulegen, um sicherzustellen, dass die Sitzungs -ID während der Übertragung nicht abgefangen wird. Auf diese Weise kann die Sicherheit der Sitzung erheblich verbessert werden und die Entführung der Sitzung kann verhindert werden.
Häufige Änderung der Sitzungs -ID : Obwohl der periodische Anruf an Session_regenerate_id () die Sicherheit verbessern kann, kann ein zu häufiger ID -Ersatz zu einer Leistungsverschlechterung führen. Im Allgemeinen kann es zum ersten Mal aufgerufen werden, nachdem der Benutzer erfolgreich angemeldet hat oder jedes Mal (z. B. 30 Minuten).
HTTPS -Verbindung : Stellen Sie sicher, dass alle Sitzungsverwaltungsvorgänge über eine sichere HTTPS -Verbindung durchgeführt werden. Andernfalls können die Daten auch dann, selbst wenn sichere und httponly unter Verwendung von SetCookie () festgelegt werden, in einer unsicheren Netzwerkumgebung abgefangen werden.
Sitzungsfixierungsangriff : Beim Verhinderung von Sitzungen zur Hijacking müssen Sie auch "Sitzungsfixierung" berücksichtigen. Dies bezieht sich auf einen Angreifer, der eine feste Sitzungs -ID im Voraus festlegt und dann den Benutzer dazu veranlasst, die ID zur Durchführung einer Sitzung zu verwenden. Die Verwendung der Funktion Session_regenerate_id () kann solche Angriffe effektiv verhindern.