Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan Keselamatan Rangka Kerja PHP: Bagaimana Mencegah Serangan CSRF?

Panduan Keselamatan Rangka Kerja PHP: Bagaimana Mencegah Serangan CSRF?

WBOY
WBOYasal
2024-06-01 10:36:57352semak imbas

PHP 框架安全指南:如何防止 CSRF 攻击?

Panduan Keselamatan Rangka Kerja PHP: Bagaimana Mencegah Serangan CSRF?

Serangan pemalsuan permintaan merentas tapak (CSRF) ialah sejenis serangan rangkaian di mana penyerang memperdaya pengguna untuk melakukan tindakan yang tidak diingini dalam aplikasi web mangsa.

Bagaimana CSRF berfungsi?

Serangan CSRF mengeksploitasi fakta bahawa kebanyakan aplikasi web membenarkan permintaan dihantar antara halaman berbeza dalam nama domain yang sama. Penyerang mencipta halaman berniat jahat yang menghantar permintaan kepada aplikasi mangsa, mencetuskan tindakan yang tidak dibenarkan.

Bagaimana untuk mencegah serangan CSRF?

1. Gunakan token anti-CSRF:

  • Tugaskan setiap pengguna token unik, simpannya dalam sesi atau kuki.
  • Sertakan medan tersembunyi dalam apl untuk menyerahkan token ini.
  • Sahkan bahawa token yang diserahkan sepadan dengan token yang disimpan.
// 生成令牌并存储在会话中
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// 在表单中包含隐藏字段
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 验证提交的令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    // 令牌无效,拒绝请求
}

2. Gunakan Corak Token Penyegerak:

  • Apabila halaman dimuatkan buat kali pertama, hasilkan token dan simpannya dalam Kuki.
  • Pada penyerahan borang, hantar token ke pelayan sebagai pengepala HTTP.
  • Sahkan bahawa token yang diserahkan sepadan dengan token yang disimpan.
// 在首次加载页面时生成令牌并存储在 Cookie 中
setcookie('csrf_token', bin2hex(random_bytes(32)), time() + 3600, '/');

// 在表单提交时,将令牌作为 HTTP 头发送
$headers = getallheaders();
$csrf_token = $headers['X-CSRF-Token'];

// 验证提交的令牌
if (!isset($csrf_token) || $csrf_token !== $_COOKIE['csrf_token']) {
    // 令牌无效,拒绝请求
}

Contoh praktikal

Sebagai contoh, menyekat serangan CSRF pada pemindahan dana dalam dompet:

// 在用户加载转账页面时生成令牌
$transfer_token = bin2hex(random_bytes(32));

// 在表单中包含隐藏字段
<input type="hidden" name="transfer_token" value="<?php echo $transfer_token; ?>">

// 验证提交的令牌
if (!isset($_POST['transfer_token']) || $_POST['transfer_token'] !== $transfer_token) {
    // 令牌无效,拒绝转账请求
}

Dengan melaksanakan langkah-langkah ini, anda boleh mencegah serangan CSRF dan melindungi aplikasi PHP anda dengan berkesan.

Atas ialah kandungan terperinci Panduan Keselamatan Rangka Kerja PHP: Bagaimana Mencegah Serangan CSRF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn