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
Lepaskan: 2024-12-17 20:00:20
asal
318 orang telah melayarinya

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;
}
Salin selepas log masuk

HTML:

<input type="hidden" name="token" value="<?php echo $token; ?>" />
Salin selepas log masuk

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'];
Salin selepas log masuk

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'];
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan