首頁  >  文章  >  後端開發  >  如何防止 PHP 函數受到 CSRF 攻擊?

如何防止 PHP 函數受到 CSRF 攻擊?

WBOY
WBOY原創
2024-05-01 14:39:01362瀏覽

摘要:PHP 函數中的 CSRF 攻擊可透過使用令牌防禦:產生唯一令牌並儲存在會話或 cookie 中。將令牌包含在受保護表單中作為隱藏欄位。處理表單提交時,驗證令牌是否與儲存的令牌相符。不符則拒絕要求。

如何防止 PHP 函数受到 CSRF 攻击?

如何防禦PHP 函數中的CSRF 攻擊

跨站點請求偽造(CSRF) 是一種惡意技術,它允許攻擊者透過受害者的瀏覽器發送欺騙性請求。對於 PHP 應用程式來說,這可能會使攻擊者利用某些函數執行未經授權的操作。

實戰案例:

假設您有一個 PHP 應用程序,其中包含一個允許使用者更改密碼的函數 change_password。函數使用以下程式碼:

<?php
if (isset($_POST['password'])) {
  $password = $_POST['password'];

  // 更新数据库中的密码...
}
?>

此程式碼容易受到CSRF 攻擊,因為攻擊者可以向受害者的瀏覽器發送POST 請求,其中包含他們希望用於受害者密碼的password 參數。這種攻擊可以透過欺騙性的電子郵件、惡意網站或其他方法來實現。

防禦措施:

為了防禦 CSRF 攻擊,需要實作機制來驗證請求的真實性。一種常用的方法是使用令牌。

  1. 產生令牌:

建立一個唯一的且難以猜測的令牌,並將其儲存在會話或 cookie 中。

<?php
session_start();

// 生成令牌并将其存储在会话中
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>
  1. 將令牌包含在表單中:

在要保護的表單中,將令牌包含為隱藏欄位。

<form action="change_password.php" method="post">
  <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" />
  <!-- 其他表单字段 -->
</form>
  1. 驗證令牌:

在處理表單提交時,驗證令牌是否與會話或 cookie 中儲存的令牌相符。如果不匹配,則拒絕請求。

<?php
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
  // 令牌验证失败,拒绝请求
  exit('Invalid request');
}
?>

透過實施這些防禦措施,您可以降低 PHP 應用程式遭受 CSRF 攻擊的風險。

以上是如何防止 PHP 函數受到 CSRF 攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn