Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan borang PHP untuk menghalang serangan CSRF

Cara menggunakan borang PHP untuk menghalang serangan CSRF

王林
王林asal
2023-06-24 11:53:411331semak imbas

Dengan perkembangan teknologi rangkaian yang berterusan, isu keselamatan semakin menjadi isu yang tidak boleh diabaikan dalam pembangunan aplikasi rangkaian. Antaranya, serangan pemalsuan permintaan merentas tapak (CSRF) adalah kaedah serangan biasa Tujuan utamanya adalah untuk menggunakan pengguna untuk memulakan permintaan yang tidak sah ke latar belakang dengan membenarkan pengguna memulakan permintaan jahat dalam penyemak imbas apabila pengguna. dilog masuk ke tapak web Ini membawa kepada kelemahan keselamatan bahagian pelayan. Dalam aplikasi PHP, menggunakan pengesahan borang adalah cara yang berkesan untuk mencegah serangan CSRF.

  1. Tambah pengesahan Token CSRF

Serangan CSRF terutamanya menggunakan identiti pengguna log masuk untuk melakukan serangan jauh, jadi perlindungan paling langsung terhadap kaedah serangan ini ialah Add beberapa nilai yang tidak konvensional kepada data halaman dan borang, dan mengehadkan setiap permintaan borang untuk dihantar sekali sahaja. Nilai-nilai ini ialah Token CSRF, yang digunakan untuk mengesahkan sama ada maklumat identiti semasa menyerahkan borang adalah sah. Apabila memproses penyerahan borang di latar belakang, Token perlu disahkan Hanya apabila ia sepadan dengan Token pratetap, permintaan itu boleh terus diproses.

Kod sampel adalah seperti berikut:

// 生成Token值,通常可以在session中设置

session_start();

$token = md5(uniqid(mt_rand(), true));

$_SESSION['csrf_token'] = $token;

// 应用到表单中

<input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>"/>

Untuk penyerahan borang, pengesahan Token diperlukan sebelum memproses data, seperti berikut:

// 获取表单提交的Token

$submittedToken = $_POST['csrf_token'];

// 验证Token是否合法

if (!isset($_SESSION['csrf_token']) || $submittedToken !== $_SESSION['csrf_token']) {

    die('Token validation failed, request denied');

}

Dalam kod di atas, kami menggunakan Mekanisme sesi PHP , menjana nilai Token bukan pendua rawak dan menyimpannya dalam sesi. Dalam borang, kita perlu menghantar nilai Token sebagai medan dalam medan tersembunyi ke latar belakang supaya ia boleh dihantar ke pelayan apabila borang diserahkan. Di bahagian pelayan, kami perlu mengesahkan nilai Token yang diminta Jika Token yang diserahkan tidak konsisten dengan Token yang telah ditetapkan, permintaan itu perlu ditolak.

  1. Mengkonfigurasi pengepala Dasar Perujuk

Dasar Perujuk ialah pengepala HTTP yang digunakan untuk mengawal sama ada penyemak imbas menyertakan medan Perujuk semasa menghantar permintaan ke tapak pihak ketiga. Jika kami secara langsung menolak permintaan untuk medan Perujuk yang tidak sah semasa pemprosesan borang, kami boleh mempertahankan secara berkesan daripada serangan CSRF.

Dalam PHP, kita boleh menggunakan kod berikut untuk menetapkan pengepala Dasar Perujuk:

header('Referrer-Policy: no-referrer');

Kod di atas memberitahu penyemak imbas supaya tidak memasukkan maklumat pengepala Perujuk semasa menghantar permintaan. Dengan cara ini, walaupun penyerang cuba melakukan serangan CSRF dengan memalsukan pengepala Perujuk, ia akan ditolak oleh penyemak imbas dan permintaan tidak akan dihantar ke pelayan.

  1. Tambahkan pengesahan "Kod Pengesahan" atau "Kata Laluan" pada borang

Selain menambah Token CSRF pada borang, kami juga boleh menambah kod pengesahan atau kata laluan tambahan , dsb. Kaedah pengesahan untuk meningkatkan keselamatan borang dan mencegah serangan CSRF. Walaupun kaedah ini agak rumit, ia sangat berkesan kerana tidak kira bagaimana penyerang cuba menipu pelayan, dia perlu melalui pautan pengesahan tambahan, menjadikan serangan lebih sukar.

  1. Elakkan menggunakan kaedah GET untuk menyerahkan borang

Serangan CSRF kebanyakannya dimulakan melalui permintaan GET, jadi kami cuba mengelak daripada menggunakan kaedah GET untuk menyerahkan data dalam borang . Jika kaedah GET mesti digunakan, kita mesti menambah nilai Token atau kaedah pengesahan lain pada borang untuk meningkatkan keselamatan borang.

Ringkasnya, mencegah serangan CSRF merupakan isu yang mesti diberi perhatian dalam pembangunan aplikasi PHP. Dengan menggunakan pelbagai mekanisme keselamatan secara rasional seperti nilai Token, pengepala Dasar Perujuk dan kod pengesahan, kami boleh melindungi aplikasi dengan berkesan daripada ancaman serangan CSRF. Pada masa yang sama, kami mesti terus memberi perhatian kepada isu keselamatan rangkaian terkini dan kaedah serangan, serta mengemas kini serta meningkatkan langkah keselamatan kami dengan segera.

Atas ialah kandungan terperinci Cara menggunakan borang PHP untuk menghalang 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