Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Melaksanakan Perlindungan Token CSRF dengan Selamat dalam Borang PHP?

Bagaimana untuk Melaksanakan Perlindungan Token CSRF dengan Selamat dalam Borang PHP?

DDD
DDDasal
2024-12-17 20:00:20421semak imbas

How to Securely Implement CSRF Token Protection in PHP Forms?

Mengurus Teknik Pertahanan CSRF: Satu Panduan dengan Borang PHP

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:

  • rand() bukan sumber rawak yang boleh dipercayai.
  • uniqid() menghasilkan bilangan entropi yang terhad.
  • md5() tidak menyumbang kepada entropi, tetapi mengubahnya.

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

  • Pertimbangkan untuk menjadikan token CSRF khusus untuk setiap borang untuk keselamatan yang dipertingkatkan.
  • Untuk perlindungan selanjutnya, gunakan enjin templat Twig untuk memudahkan pengendalian token dan menyepadukannya ke dalam anda templat.
  • Terokai penggunaan perpustakaan khusus seperti Paragon Initiative Enterprises' Pustaka anti-CSRF untuk token CSRF yang unik dan sekali guna.

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!

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