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

PHPz
Freigeben: 2024-02-25 16:08:01
nach vorne
1184 Leute haben es durchsucht

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>
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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");
Nach dem Login kopieren

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;
}
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:lsjlt.com
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!