Pengenalan
Menambahkan benteng keselamatan yang betul pada tapak web anda melibatkan menangani potensi kelemahan, termasuk Pemalsuan Permintaan Rentas Tapak (CSRF). Artikel ini menyelidiki secara berkesan menambahkan token CSRF menggunakan PHP.
Memahami Isu
Anda telah melaksanakan perlindungan token CSRF di tapak web anda, tetapi nilai token tidak konsisten hadir dalam bentuk HTML. Khususnya, borang "hubungi kami" dan AJAX mempamerkan isu ini.
Menyemak Kod
Mari kita teliti kod yang digunakan untuk menyuntik token:
PHP:
if (!isset($_SESSION)) { session_start(); $_SESSION['formStarted'] = true; } if (!isset($_SESSION['token'])) { $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token; }
HTML:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Mengatasi Kelemahan
Malangnya, kaedah penjanaan token semasa menggunakan kelemahan teknik:
Melaksanakan Teguh Penjana Token
Untuk melindungi borang anda, gunakan kod PHP berikut:
PHP 7:
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
PHP 5.3 (atau dengan ext-mcrypt):
session_start(); if (empty($_SESSION['token'])) { if (function_exists('mcrypt_create_iv')) { $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } $token = $_SESSION['token'];
Mengesahkan Token
Seterusnya, sahkan token CSRF dengan betul untuk mengelakkan percubaan mengeksploitasi:
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to process the form data } else { // Log this as a warning and monitor such attempts } }
Tambahan Pertimbangan
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perlindungan Token CSRF dengan Selamat dalam Borang PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!