Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mencegah Serangan Pemalsuan Permintaan Merentas Tapak (CSRF) dalam PHP?

Bagaimanakah Saya Boleh Mencegah Serangan Pemalsuan Permintaan Merentas Tapak (CSRF) dalam PHP?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 16:37:11651semak imbas

How Can I Prevent Cross-Site Request Forgery (CSRF) Attacks in PHP?

Mencegah CSRF dalam PHP

Pemalsuan permintaan merentas tapak (CSRF) ialah sejenis serangan di mana tapak web berniat jahat menghantar permintaan ke tapak web yang sah bagi pihak pengguna yang disahkan. Ini boleh membenarkan penyerang untuk melaksanakan tindakan yang tidak dimaksudkan oleh pengguna, seperti menukar kata laluan mereka atau membuat pembelian palsu.

Mengurangkan Serangan CSRF

Terdapat beberapa teknik yang boleh digunakan untuk mencegah Serangan CSRF dalam PHP, termasuk:

1. Memerlukan Pengesahan dalam Parameter GET dan POST, Bukan Sahaja Kuki

Langkah ini mengehadkan keupayaan tapak web berniat jahat untuk menghantar permintaan bagi pihak pengguna yang disahkan dengan memerlukan token pengesahan yang sah untuk hadir dalam kedua-dua GET dan POST parameter permintaan.

2. Menyemak Pengepala Perujuk HTTP

Pengepala Perujuk HTTP mengandungi URL halaman yang merujuk kepada halaman semasa. Dengan menyemak pengepala Perujuk, adalah mungkin untuk mengesan sama ada permintaan datang daripada sumber yang sah atau daripada tapak web yang berniat jahat.

Pelaksanaan dalam Rangka Kerja PHP Kohana

Mengesahkan GET dan POST Parameter

Dalam Kohana, anda boleh menggunakan peraturan Valid::not_empty() untuk mengesahkan parameter GET dan POST untuk memastikan bahawa ia tidak kosong. Contohnya:

$rules = array(
    'get_param' => array(
        array('not_empty')
    ),
    'post_param' => array(
        array('not_empty')
    )
);
$validation = Validation::factory($request->query() + $request->post())
    ->rules($rules);
if (!$validation->check()) {
    // CSRF attack detected
}

Menyemak Pengepala Perujuk HTTP

Dalam Kohana, anda boleh menggunakan kaedah Request::referrer() untuk mendapatkan URL rujukan muka surat. Untuk menyemak sama ada pengepala Perujuk adalah sah, anda boleh membandingkannya dengan nilai yang dijangkakan:

$referrer = $request->referrer();
if ($referrer !== $expected_referrer) {
    // CSRF attack detected
}

Menggunakan Token Satu Kali

Cara paling berkesan untuk mencegah serangan CSRF adalah dengan menggunakan token sekali sahaja. Token ini dijana pada pelayan dan disimpan dalam sesi. Apabila pengguna menyerahkan borang, token disertakan dalam permintaan. Pelayan kemudian mengesahkan token dan, jika ia sah, melengkapkan permintaan.

Untuk melaksanakan token sekali sahaja dalam Kohana, anda boleh menggunakan langkah berikut:

  1. Jana token rawak dan simpannya dalam sesi.
  2. Sertakan token dalam bentuk yang pengguna menyerahkan.
  3. Sahkan token di bahagian pelayan sebelum melengkapkan permintaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Serangan Pemalsuan Permintaan Merentas Tapak (CSRF) dalam 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