首頁  >  文章  >  後端開發  >  絕地反擊,反敗為勝:PHP 跨站請求偽造(CSRF)防範的逆襲秘訣

絕地反擊,反敗為勝:PHP 跨站請求偽造(CSRF)防範的逆襲秘訣

PHPz
PHPz轉載
2024-02-25 16:07:201152瀏覽

php小編草莓為您揭露PHP跨站請求偽造(CSRF)的防範秘​​訣。 CSRF攻擊是常見的網路安全威脅,但透過一些簡單而有效的防範措施,我們可以反敗為勝,保護網站和使用者的安全。本文將介紹CSRF攻擊的原理與危害,以及如何使用token驗證、SameSite Cookie等技術來有效防範此攻擊,讓您的網站更安全可靠。

CSRF 令牌是一種用於驗證請求是否來自合法來源的隨機字串。您可以透過在使用者的會話中儲存 CSRF 令牌,並在每個請求中包含該令牌來實現 CSRF 防護。當伺服器收到請求時,它會將請求中的令牌與儲存在會話中的令牌進行比較。如果不匹配,則伺服器會拒絕該請求。

<?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>

驗證請求來源

#您可以透過驗證請求的來源來防止 CSRF 攻擊。您可以透過檢查請求的 Http 來源頭來實現這一點。如果請求的來源頭不是您的應用程式的 URL,則您應該拒絕該請求。

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

使用安全標頭

#您可以透過使用安全標頭來防止 CSRF 攻擊。安全標頭可以告訴瀏覽器的行為,以幫助防止 CSRF 攻擊。您可以使用以下安全標頭:

  • Content-Security-Policy:此標頭可以限制瀏覽器可以載入的資源。
  • X-Frame-Options:此標頭可以防止您的應用程式在另一個網站中載入。
  • X-XSS-Protection:此標頭可以協助防止跨站腳本(XSS)攻擊。
<?php
// 设置安全标头
header("Content-Security-Policy: default-src "self";");
header("X-Frame-Options: SAMEORIGIN");
header("X-XSS-Protection: 1; mode=block");

限制敏感運算的範圍

#您可以透過限制敏感操作的範圍來防止 CSRF 攻擊。您可以透過將敏感操作限制在經過身份驗證的使用者才能存取的頁面來實現這一點。您還可以透過要求使用者在執行敏感操作之前輸入密碼來實現這一點。

<?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;
}
}

結論

透過使用上述技術,您可以防止 CSRF 攻擊並保護您的 PHP 應用程式。

以上是絕地反擊,反敗為勝:PHP 跨站請求偽造(CSRF)防範的逆襲秘訣的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lsjlt.com。如有侵權,請聯絡admin@php.cn刪除