Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menangani pemalsuan permintaan merentas tapak dalam pembangunan PHP

Cara menangani pemalsuan permintaan merentas tapak dalam pembangunan PHP

王林
王林asal
2023-10-08 10:03:171118semak imbas

Cara menangani pemalsuan permintaan merentas tapak dalam pembangunan PHP

Cara menangani pemalsuan permintaan merentas tapak dalam pembangunan PHP

Pengenalan: Dengan perkembangan pesat Internet, isu keselamatan laman web telah menjadi semakin menonjol. Salah satunya ialah masalah Pemalsuan Permintaan Silang Tapak (CSRF). Artikel ini akan memperkenalkan cara mengendalikan serangan CSRF secara berkesan dalam pembangunan PHP dan menyediakan contoh kod khusus.

  1. Apakah masalah pemalsuan permintaan rentas tapak?
    Pemalsuan permintaan merentas tapak (CSRF) ialah kaedah serangan di mana penyerang memperdaya pengguna untuk melakukan operasi berniat jahat pada tapak web yang dilog masuk, seperti memindahkan wang, mengubah suai maklumat peribadi, dsb. Biasanya penyerang akan mengambil kesempatan daripada status log masuk pengguna untuk menghantar permintaan berniat jahat di tapak web lain untuk melakukan operasi berpura-pura menjadi identiti pengguna.
  2. Kaedah biasa untuk mencegah serangan CSRF
    (1) Menjana Token secara rawak
    Apabila pengguna log masuk, jana Token rawak untuk pengguna dan simpan di bahagian pelayan dan Sesi pengguna. Setiap permintaan pengguna perlu membawa Token dalam permintaan dan mengesahkannya di bahagian pelayan. Memandangkan token dijana secara rawak, penyerang tidak dapat meneka nilai token yang betul, dengan itu menghalang serangan CSRF.

Kod sampel adalah seperti berikut:

// 在用户登录时生成Token,并存储在Session中
session_start();
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// 将Token添加到表单中
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 在服务器端验证Token
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die('CSRF攻击检测');
    }
}

(2) Tetapkan atribut SameSite Cookie
Dalam pelayar terkini, anda boleh menetapkan SameSite atribut kuki untuk Mencegah serangan CSRF. Nilai atribut SameSite boleh ditetapkan kepada Strict, Lax, atau None. Ketat bermaksud bahawa kuki hanya boleh dihantar apabila permintaan dibuat daripada tapak yang sama, manakala Lax bermaksud kuki dibenarkan dihantar dalam keadaan tertentu (seperti mengklik pautan daripada tapak web luaran). Tiada bermakna bahawa kuki boleh dihantar dalam apa jua keadaan, yang boleh menyebabkan beberapa isu keselamatan.

Kod sampel adalah seperti berikut:

setcookie('session_id', session_id(), [
    'expires' => 0,
    'path' => '/',
    'domain' => 'your_domain.com',
    'secure' => true,  // 只能通过HTTPS发送
    'httponly' => true,  // 无法通过JavaScript访问
    'samesite' => 'Strict'
]);
  1. Nota lain
    (1) Gunakan protokol HTTPS
    Menggunakan protokol HTTPS boleh memastikan bahawa protokol HTTPS boleh pengguna dan pelayan Permintaan dan respons disulitkan, menghalang permintaan daripada dirampas dan diusik oleh orang tengah.

(2) Kemas kini tepat pada masanya rangka kerja belakang dan pustaka
Kerap mengemas kini versi rangka kerja belakang dan perpustakaan boleh mengekalkan keselamatan kod dan mengelakkan serangan terhadap kelemahan keselamatan yang diketahui Mereka yang menggunakannya.

(3) Kawalan kebenaran yang munasabah
Beri setiap pengguna kebenaran minimum untuk menghalang pengguna daripada beroperasi di luar kuasa mereka.

Kesimpulan: Pemalsuan permintaan merentas tapak (CSRF) ialah masalah keselamatan rangkaian biasa. Dengan menjana Token secara rawak dan menetapkan atribut Kuki SameSite, kami boleh menghalang serangan CSRF dengan berkesan. Pada masa yang sama, mengekalkan keselamatan kod dan kawalan kebenaran yang munasabah juga merupakan langkah penting untuk mencegah serangan CSRF.

Jumlah perkataan: 714 patah perkataan

Atas ialah kandungan terperinci Cara menangani pemalsuan permintaan merentas tapak dalam pembangunan PHP. 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