Heim  >  Artikel  >  Backend-Entwicklung  >  Best Practices für die PHP-Programmierung zur Verhinderung von CSRF-Angriffen

Best Practices für die PHP-Programmierung zur Verhinderung von CSRF-Angriffen

王林
王林Original
2023-07-05 16:41:291257Durchsuche

„Best Practices für die PHP-Programmierung zur Verhinderung von CSRF-Angriffen“ Um Benutzer und Anwendungen zu schützen, müssen Entwickler einige Maßnahmen ergreifen, um CSRF-Angriffe zu verhindern. In diesem Artikel werden einige Best Practices der PHP-Programmierung zur Verhinderung von CSRF-Angriffen vorgestellt und einige Codebeispiele bereitgestellt.

Verwenden Sie CSRF-Tokens

Die Verwendung von CSRF-Tokens ist eine der gebräuchlichsten und effektivsten Möglichkeiten, CSRF-Angriffe zu verhindern. Pro Benutzersitzung wird ein eindeutiges Token generiert und jeder Formularübermittlungsanforderung beigefügt. Wenn der Server die Anfrage verarbeitet, prüft er, ob das Token gültig ist. Wenn das Token ungültig ist, kann der Server die Anfrage ablehnen oder andere benutzerdefinierte Aktionen ausführen.

  1. Hier ist ein einfaches Beispiel für die Verwendung eines CSRF-Tokens:
  2. // 生成CSRF令牌
    function generateCSRFToken() {
        $token = bin2hex(random_bytes(32));
        $_SESSION['csrf_token'] = $token;
        return $token;
    }
    
    // 在表单中包含CSRF令牌
    function renderForm() {
        $csrfToken = generateCSRFToken();
        echo '<form action="process.php" method="post">';
        echo '<input type="hidden" name="csrf_token" value="' . $csrfToken . '">';
        echo '<input type="text" name="username">';
        echo '<input type="password" name="password">';
        echo '<input type="submit" value="Submit">';
        echo '</form>';
    }
    
    // 处理表单提交请求
    function processForm() {
        if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
            // 令牌无效,处理错误
            echo 'Invalid CSRF token!';
            return;
        }
        
        // 处理表单提交数据
        $username = $_POST['username'];
        $password = $_POST['password'];
        
        // 执行其他操作
        // ...
    }
    
    // 调用函数
    renderForm();
    processForm();
Im obigen Code ist die Funktion generateCSRFToken für die Generierung des CSRF-Tokens und dessen Speicherung in der Sitzung des Benutzers verantwortlich. Die Funktion renderForm ist für das Rendern des Formulars und das Einfügen des CSRF-Tokens in die ausgeblendeten Felder verantwortlich. Die Funktion processForm ist für die Verarbeitung von Formularübermittlungsanfragen und die Überprüfung der Gültigkeit des CSRF-Tokens vor der Verarbeitung verantwortlich.

    Überprüfen Sie die Quelle der Anfrage

    Zusätzlich zur Verwendung von CSRF-Tokens können Sie CSRF-Angriffe auch verhindern, indem Sie die Quelle der Anfrage überprüfen. Bei der Verarbeitung einer Anfrage kann der Server das Feld Referer im Anfrageheader überprüfen, um sicherzustellen, dass die Anfrage von demselben Domänennamen stammt. Wenn das Feld Referer leer ist oder nicht der erwartete Domänenname ist, kann der Server die Anfrage ablehnen oder andere benutzerdefinierte Aktionen ausführen. generateCSRFToken函数负责生成CSRF令牌,并将其存储在用户的会话中。renderForm函数负责渲染表单,并在隐藏的字段中包含CSRF令牌。processForm函数负责处理表单提交请求,并在处理前验证CSRF令牌的有效性。

    1. 验证请求来源
      除了使用CSRF令牌外,还可以通过验证请求的来源来防止CSRF攻击。在处理请求时,服务器可以检查请求头中的Referer字段,确保请求是来自同一域名的。如果Referer字段为空或不是期望的域名,服务器可以拒绝请求或执行其他自定义操作。

    以下是一个简单的验证请求来源的示例:

    function processRequest() {
        $expectedDomain = 'https://www.example.com';
        
        if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $expectedDomain) !== 0) {
            // 请求来源无效,处理错误
            echo 'Invalid request source!';
            return;
        }
        
        // 处理请求
        // ...
    }

    在上述代码中,processRequest函数负责处理请求,并验证请求来源。通过检查请求头中的Referer

    Das Folgende ist ein einfaches Beispiel für die Überprüfung der Anforderungsquelle:
    rrreee

    Im obigen Code ist die Funktion processRequest für die Verarbeitung der Anforderung und die Überprüfung der Anforderungsquelle verantwortlich. Der Server kann die Gültigkeit der Anfrage ermitteln, indem er prüft, ob das Feld Referer im Anfrageheader mit dem erwarteten Domänennamen beginnt.

    Zusammenfassung🎜CSRF-Angriffe stellen eine gewisse Bedrohung für die Sicherheit von Webanwendungen dar, aber durch die Einführung geeigneter Programmierpraktiken können Entwickler solche Angriffe wirksam verhindern. Dieser Artikel behandelt zwei Best Practices in der PHP-Programmierung: die Verwendung von CSRF-Tokens und die Überprüfung der Herkunft von Anfragen. Diese Methoden können Entwicklern helfen, die Sicherheit von Webanwendungen zu verbessern und Benutzerdaten und Privatsphäre zu schützen. 🎜🎜Aber es sollte beachtet werden, dass der Verlass auf diese Maßnahmen allein CSRF-Angriffe möglicherweise nicht vollständig verhindern kann. Entwickler sollten auch andere Sicherheitsmaßnahmen ergreifen, beispielsweise die Verwendung von HTTPS zur Verschlüsselung der Kommunikation und die Einrichtung einer sicheren Sitzungsverwaltung für Benutzer. Am wichtigsten ist, dass Entwickler ständig auf die neuesten Informationen zu Sicherheitslücken achten und Anwendungen umgehend reparieren und aktualisieren, um die Anwendungssicherheit aufrechtzuerhalten. 🎜

Das obige ist der detaillierte Inhalt vonBest Practices für die PHP-Programmierung zur Verhinderung von CSRF-Angriffen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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