Heim >Backend-Entwicklung >PHP-Tutorial >Schlagen Sie zurück und verwandeln Sie eine Niederlage in einen Sieg: Gegenangriffstipps zur Verhinderung von PHP Cross-Site Request Forgery (CSRF).

Schlagen Sie zurück und verwandeln Sie eine Niederlage in einen Sieg: Gegenangriffstipps zur Verhinderung von PHP Cross-Site Request Forgery (CSRF).

PHPz
PHPznach vorne
2024-02-25 16:07:201204Durchsuche

php-Editor Strawberry verrät Ihnen das Geheimnis zur Verhinderung von PHP-Cross-Site-Request-Forgery (CSRF). CSRF-Angriffe stellen eine häufige Bedrohung für die Netzwerksicherheit dar, aber durch einige einfache und wirksame Präventivmaßnahmen können wir eine Niederlage in einen Sieg verwandeln und die Sicherheit von Websites und Benutzern schützen. In diesem Artikel werden die Prinzipien und Schäden von CSRF-Angriffen vorgestellt und erläutert, wie Sie mithilfe der Token-Verifizierung, des SameSite-Cookies und anderer Technologien solche Angriffe wirksam verhindern und Ihre Website sicherer und zuverlässiger machen können.

Ein CSRF-Token ist eine zufällige Zeichenfolge, mit der überprüft wird, ob eine Anfrage von einer legitimen Quelle stammt. Sie können den CSRF-Schutz implementieren, indem Sie ein CSRF-Token in der Sitzung des Benutzers speichern und das Token bei jeder Anfrage einschließen. Wenn der Server eine Anfrage erhält, vergleicht er das Token in der Anfrage mit dem in der Sitzung gespeicherten Token. Wenn keine Übereinstimmung vorliegt, lehnt der Server die Anfrage ab.

<?PHP
// 生成 CSRF 令牌
$csrfToken = bin2hex(random_bytes(32));

// 将 CSRF 令牌存储在用户的会话中
$_SESSioN["csrfToken"] = $csrfToken;

// 将 CSRF 令牌包含在每个请求中
<fORM action="submit.php" method="post">
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken; ?>">
<input type="submit" value="Submit">
</form>

Anfragequelle überprüfen

Sie können CSRF-Angriffe verhindern, indem Sie den Ursprung der Anfrage überprüfen. Sie können dies tun, indem Sie den Http Origin-Header der Anfrage überprüfen. Wenn der Origin-Header der Anfrage nicht die URL Ihrer Anwendung ist, sollten Sie die Anfrage ablehnen.

<?php
// 检查请求的 HTTP 来源头
$referer = $_SERVER["HTTP_REFERER"];
if (strpos($referer, "https://example.com") !== 0) {
// 请求不是来自您的应用程序
header("HTTP/1.1 403 Forbidden");
exit;
}

Verwenden Sie Sicherheitsheader

Sie können CSRF-Angriffe verhindern, indem Sie den Header Security verwenden. Sicherheitsheader teilen dem Browser mit, wie er sich verhalten soll, um CSRF-Angriffe zu verhindern. Sie können die folgenden Sicherheitsheader verwenden:

  • Content-Security-Policy: Dieser Header kann die Ressourcen einschränken, die der Browser laden kann.
  • X-Frame-Options: Dieser Header verhindert, dass Ihre App auf einer anderen Website geladen wird.
  • X-XSS-Protection: Dieser Header kann dazu beitragen, Cross-Site-Scripting-Angriffe (XSS) zu verhindern.
<?php
// 设置安全标头
header("Content-Security-Policy: default-src "self";");
header("X-Frame-Options: SAMEORIGIN");
header("X-XSS-Protection: 1; mode=block");

Beschränken Sie den Umfang sensibler Vorgänge

Sie können CSRF-Angriffe verhindern, indem Sie den Umfang sensibler Vorgänge einschränken. Sie können dies erreichen, indem Sie vertrauliche Aktionen auf Seiten beschränken, auf die nur authentifizierte Benutzer zugreifen können. Sie können dies auch erreichen, indem Sie von Benutzern die Eingabe eines Kennworts verlangen, bevor sie vertrauliche Aktionen ausführen.

<?php
// 将敏感操作限制在经过身份验证的用户才能访问的页面
if (!isset($_SESSION["authenticated"])) {
// 用户未经身份验证
header("HTTP/1.1 403 Forbidden");
exit;
}

// 要求用户在执行敏感操作之前输入密码
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!isset($_POST["passWord"]) || $_POST["password"] != "secret") {
// 密码不正确
header("HTTP/1.1 403 Forbidden");
exit;
}
}

Fazit

Durch die Verwendung der oben genannten Techniken können Sie CSRF-Angriffe verhindern und Ihre PHP-Anwendungen schützen.

Das obige ist der detaillierte Inhalt vonSchlagen Sie zurück und verwandeln Sie eine Niederlage in einen Sieg: Gegenangriffstipps zur Verhinderung von PHP Cross-Site Request Forgery (CSRF).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lsjlt.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen