Aktueller Standort: Startseite> Neueste Artikel> Ist es wirklich effektiv, HTMLSpecialChars zu verwenden, um CSRF -Angriffe zu verhindern? Analyse von Schutzprinzipien und Nutzungstechniken

Ist es wirklich effektiv, HTMLSpecialChars zu verwenden, um CSRF -Angriffe zu verhindern? Analyse von Schutzprinzipien und Nutzungstechniken

M66 2025-07-18

Die tatsächliche Verwendung von HTMLSpecialChars ()

htmlspecialChars () ist eine Funktion zur Verhinderung von XSS (Cross-Site-Skriptangriffe). Sein Zweck ist es, Sonderzeichen in HTML (wie < , > , " , & ) in HTML -Entitäten umzuwandeln, um zu verhindern, dass bösartige Skripte, die von Benutzern übermittelt wurden, auf der Seite ausgeführt werden. Zum Beispiel:

 <?php
$user_input = '<script>alert("XSS")</script>';
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>

Das Ausgangsergebnis ist:

 &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;

Dieser Code verhindert effektiv eine schädliche JavaScript -Injektion in HTML, aber dies hat eine geringe direkte Beziehung zur Verteidigung von CSRF -Angriffen.


Analyse des Prinzips des CSRF -Angriffs

CSRF verwendet den "logierten Status" des Benutzers. Der Angreifer veranlasst den Benutzer, auf einen Link zu klicken oder auf ein Bild/Iframe zuzugreifen, und stellt eine Anforderung mit dem aktuellen Anmeldestatus des Benutzers auf einer bestimmten Website. Zum Beispiel:

 <img src="https://m66.net/delete_account.php" />

Wenn der Benutzer auf m66.net angemeldet ist und der Server keine Überprüfung durchgeführt hat, kann diese Anforderung das Benutzerkonto tatsächlich löschen.

Der Schlüssel zu diesem Angriff ist, dass der Benutzer eine Anfrage nach einer Statusänderung nicht informiert hat und der Server der Anfrage vertraut.


Gründe, warum HTMLSpecialChars () CSRF nicht verhindern kann

htmlSpecialChars () wirkt in der "Ausgangsbühne" und verhindert hauptsächlich, dass der Browser böswillige Skripte analysiert. CSRF -Angriffe sind automatisch eingeleitet oder durch den Browser des Benutzers eingeleitet. Auch wenn die Seite keine Ausgabe hat, kann sie ausgelöst werden.

Mit anderen Worten, CSRF ist eine "Anfrage zur Verkleidung der Identität des Benutzers" und hat nichts damit zu tun, ob der Ausgabeinhalt entkommen wurde. Daher verhindert HTMLSpecialChars () keine CSRF -Angriffe.


Die richtige Art, sich gegen CSRF zu verteidigen

  1. Mit CSRF -Token

Der effizienteste Weg besteht darin, dem Formular ein zufällig generiertes CSRF -Token hinzuzufügen und bei der Bearbeitung der Anforderung zu überprüfen. Zum Beispiel:

 <?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>
<form method="POST" action="https://m66.net/update_profile.php">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" />
    <!-- Andere Formfelder -->
    <button type="submit">einreichen</button>
</form>
<?php
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die("Illegale Anfrage!");
    }
    // Aktualisierungsvorgänge durchführen
}
?>
  1. Überprüfen Sie den Referer- oder Ursprungs -Header

Obwohl es sich nicht vollständig verlassen kann, kann es helfen, festzustellen, ob die Anfrage in einigen Szenarien legal ist. Zum Beispiel:

 <?php
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (parse_url($referer, PHP_URL_HOST) !== 'm66.net') {
    die("Illegale Quelle");
}
?>
  1. Verwenden Sie das Samesit Cookie -Attribut

Moderne Browser unterstützen das Verhindern, dass Dritte Cookies anfordern, indem das Cookie -Attribut von samesit = strict oder samesit = lax festgelegt wird:

 setcookie('session_id', $value, [
    'samesite' => 'Strict',
    'secure' => true,
    'httponly' => true
]);