Wie PHP sich gegen CSRF-Angriffe verteidigt

WBOY
Freigeben: 2023-06-30 19:36:02
Original
1687 Leute haben es durchsucht

So nutzen Sie PHP zur Abwehr von Cross-Site-Request-Forgery-Angriffen (CSRF)

Mit der Entwicklung und Beliebtheit von Webanwendungen werden Netzwerksicherheitsprobleme immer wichtiger. Cross-Site-Request-Forgery-Angriffe (CSRF) sind zu einer der häufigsten Angriffsmethoden geworden. Bei einem CSRF-Angriff handelt es sich um einen Angreifer, der einige böswillige Vorgänge durchführt, indem er sich als Anfragen legitimer Benutzer ausgibt, beispielsweise Geld überweisen, Passwörter ändern usw., ohne dass der Benutzer sich dessen bewusst ist. Um Benutzer und Webanwendungen zu schützen, müssen Entwickler Maßnahmen ergreifen, um sich gegen solche Angriffe zu verteidigen. In diesem Artikel wird erläutert, wie Sie PHP zur Abwehr von CSRF-Angriffen verwenden.

  1. Verstehen Sie die Prinzipien von CSRF-Angriffen
    Bevor wir uns gegen CSRF-Angriffe verteidigen, müssen wir die Prinzipien von Angriffen verstehen. Das Prinzip des CSRF-Angriffs besteht darin, die Cookie-Informationen zu verwenden, nachdem sich der Benutzer bei anderen Websites oder Webanwendungen angemeldet hat, um böswillige Anfragen als legitime Anfragen zu tarnen und sie an die Zielwebsite oder -anwendung zu senden. Daher erfordern CSRF-Angriffe, dass Benutzer der Zielwebsite legitime Benutzer sein müssen, die die Authentifizierung bestanden haben.
  2. Token generieren und überprüfen
    Zur Abwehr von CSRF-Angriffen können wir Token verwenden, um die Legitimität der Anfrage zu überprüfen. Das Token ist eine zufällig generierte Zeichenfolge, die der Sitzung des Benutzers zugeordnet und auf der Serverseite gespeichert wird. In jedem Formular fügen wir ein verstecktes Feld hinzu, das den Wert des Tokens enthält. Wenn der Benutzer das Formular absendet, müssen wir überprüfen, ob der Wert des Tokens mit dem auf der Serverseite gespeicherten Wert übereinstimmt. Wenn sie inkonsistent sind, ist die Anfrage illegal und wir können die Anfrage beenden oder eine andere notwendige Verarbeitung durchführen.

Hier ist ein Beispielcode mit einem Token:

// 生成令牌
function generateToken() {
    $token = bin2hex(random_bytes(32));
    $_SESSION['csrf_token'] = $token;
    return $token;
}

// 验证令牌
function verifyToken($token) {
    if(isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token) {
        return true;
    }
    return false;
}

// 在表单中添加令牌字段
function addTokenField() {
    $token = generateToken();
    echo '<input type="hidden" name="csrf_token" value="'.$token.'">';
}
Nach dem Login kopieren
  1. Überprüfen Sie die Quelle der Anfrage
    Die Überprüfung des Tokens allein reicht nicht aus, da der Angreifer das Token immer noch auf andere Weise erhalten kann. Für zusätzliche Sicherheit können wir auch den Ursprung der Anfrage überprüfen. Es gibt zwei Methoden, um die Quelle der Anfrage zu überprüfen: Eine besteht darin, den Referer-Header zu überprüfen, und die andere darin, den Origin-Header zu überprüfen.

Beispielcode zur Überprüfung des Referer-Headers:

function verifyReferer() {
    if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== false) {
        return true;
    }
    return false;
}
Nach dem Login kopieren

Beispielcode zur Überprüfung des Origin-Headers:

function verifyOrigin() {
    if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] === 'https://www.example.com') {
        return true;
    }
    return false;
}
Nach dem Login kopieren
  1. Cookie-Attribute entsprechend festlegen
    Um die Sicherheit zu verbessern, können wir die Schwierigkeit von CSRF-Angriffen erhöhen, indem wir die Attribute von festlegen Kekse. Sie können beispielsweise festlegen, dass Cookies nur bei HTTPS-Verbindungen übertragen werden, den Umfang von Cookies nur auf den aktuellen Domänennamen beschränken usw.

Beispielcode zum Festlegen von Cookie-Eigenschaften:

session_set_cookie_params([
    'lifetime' => 86400, // Cookie的有效期为一天
    'path' => '/',
    'domain' => '.example.com',
    'secure' => true, // 仅在HTTPS连接下传输
    'httponly' => true // 仅通过HTTP协议访问
]);
session_start();
Nach dem Login kopieren
  1. Achten Sie auf die Sicherheit beim Anmelden und Abmelden.
    Anmelden und Abmelden sind sehr wichtige Vorgänge in Webanwendungen, und auch ihre Sicherheit erfordert besondere Aufmerksamkeit. Die ordnungsgemäße Handhabung des Anmelde- und Abmeldevorgangs kann CSRF-Angriffe effektiv abwehren.

Während des Anmeldevorgangs können wir ein Anmeldetoken generieren und es serverseitig und in der Sitzung speichern. Bei jeder Anmeldeanfrage müssen wir die Gültigkeit des Tokens überprüfen, um sicherzustellen, dass das Token nur über den Anmeldevorgang erhalten werden kann.

Während des Abmeldevorgangs müssen wir die mit dem Benutzer verbundenen Sitzungsdaten zerstören und die Sitzungs-ID löschen. Dadurch wird verhindert, dass Angreifer Sitzungs-IDs stehlen, um sich als Benutzer auszugeben.

Zusammenfassung:
CSRF-Angriffe sind ein häufiges Netzwerksicherheitsproblem, aber wir können einige Maßnahmen ergreifen, um uns gegen diesen Angriff zu verteidigen. In diesem Artikel werden einige Methoden zur Verwendung von PHP zur Abwehr von CSRF-Angriffen vorgestellt, darunter das Generieren und Überprüfen von Token, das Überprüfen von Anforderungsquellen, das Festlegen von Cookie-Attributen und die Beachtung der Anmelde- und Abmeldesicherheit. Durch den kombinierten Einsatz dieser Methoden können wir die Sicherheit von Webanwendungen und Benutzern wirksam schützen.

Das obige ist der detaillierte Inhalt vonWie PHP sich gegen CSRF-Angriffe verteidigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage