Cara menggunakan cara membuat token php

Untuk kode keamanan, harap jangan membuat token Anda dengan cara ini: $token = md5(uniqid(Rand(), TRUE));

  • Rand() dapat diprediksi
  • uniqid() hanya menambahkan hingga 29 bit entropi
  • md5() tidak menambahkan entropi, ia hanya mencampurnya secara deterministik

Coba ini:

Menghasilkan Token CSRF

PHP 7

session_start();
if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];

Sidenote: Salah satu dari proyek open source majikan saya adalah inisiatif untuk backport random_bytes() dan random_int() ke PHP 5 proyek. Ini MIT dilisensikan dan tersedia di Github dan Composer sebagai paragonie/random_compat .

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'];

Memverifikasi Token CSRF

Jangan hanya menggunakan == Atau bahkan ===, Gunakan hash_equals() (PHP 5.6+ saja, tetapi tersedia untuk versi sebelumnya dengan - hash-compat perpustakaan).

if (!empty($_POST['token'])) {
    if (hash_equals($_SESSION['token'], $_POST['token'])) {
         // Proceed to process the form data
    } else {
         // Log this as a warning and keep an eye on these attempts
    }
}

Lebih Lanjut dengan Token Per-Bentuk

Anda selanjutnya dapat membatasi token hanya tersedia untuk formulir tertentu dengan menggunakan hash_hmac() . HMAC adalah fungsi hash kunci tertentu yang aman untuk digunakan, bahkan dengan fungsi hash yang lebih lemah (mis. MD5). Namun, saya sarankan menggunakan keluarga SHA-2 fungsi hash sebagai gantinya.

Pertama, buat token kedua untuk digunakan sebagai kunci HMAC, lalu gunakan logika seperti ini untuk merendernya:

<input type="hidden" name="token" value="<?php
    echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
?>" />

Dan kemudian menggunakan operasi yang kongruen saat memverifikasi token:

$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
    // Continue...
}

Token yang dihasilkan untuk satu formulir tidak dapat digunakan kembali dalam konteks lain tanpa mengetahui $_SESSION['second_token']. Penting bahwa Anda menggunakan token terpisah sebagai kunci HMAC daripada yang baru saja Anda letakkan di halaman.

Bonus: Pendekatan Hibrida + Twig Integrasi

Siapa pun yang menggunakan mesin ranting templating dapat mengambil manfaat dari strategi ganda yang disederhanakan dengan menambahkan filter ini ke lingkungan Twig:

$twigEnv->addFunction(
    new \Twig_SimpleFunction(
        'form_token',
        function($lock_to = null) {
            if (empty($_SESSION['token'])) {
                $_SESSION['token'] = bin2hex(random_bytes(32));
            }
            if (empty($_SESSION['token2'])) {
                $_SESSION['token2'] = random_bytes(32);
            }
            if (empty($lock_to)) {
                return $_SESSION['token'];
            }
            return hash_hmac('sha256', $lock_to, $_SESSION['token2']);
        }
    )
);

Dengan fungsi Twig ini, Anda dapat menggunakan kedua token tujuan umum seperti:

<input type="hidden" name="token" value="{{ form_token() }}" />

Atau varian yang dikunci:

<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />

Twig hanya mementingkan rendering template; Anda masih harus memvalidasi token dengan benar. Menurut pendapat saya, strategi Twig menawarkan fleksibilitas dan kesederhanaan yang lebih besar, sambil mempertahankan kemungkinan keamanan maksimum.


Token CSRF Sekali Pakai

Jika Anda memiliki persyaratan keamanan yang setiap token CSRF diizinkan untuk dapat digunakan tepat satu kali, strategi paling sederhana memperbaruinya setelah setiap validasi berhasil. Namun, hal itu akan membatalkan setiap token sebelumnya yang tidak cocok dengan orang-orang yang meramban banyak tab sekaligus.

Paragon Initiative Enterprises memelihara perpustakaan Anti-CSRF untuk kasus sudut ini. Ini berfungsi dengan token sekali pakai sekali pakai, secara eksklusif. Ketika cukup token disimpan dalam data sesi (konfigurasi default: 65535), itu akan membatalkan token tertua yang tidak ditebus terlebih dahulu.

Cara menggunakan cara membuat token php

Cara Membuat Random Token Pada PHP - Bagi kamu yang membutuhkan fungsi untuk membuat token atau validasi tertentu dan membutuhkan 1 kalimat acak terdiri dari Huruf kecil, besar dan angka. hanya dengan menuliskan rumus fungsi dan ditambahkan dengan angka, maka jumlah token panjangnya akan disesuaikan dengan angka yang telah disebutkan.

Setelah itu token tersebut bisa didapatkan dan bisa dioleh menjadi token login username, simpan didalam database lalu bisa dikelolah lebih lanjut lagi.

Langsung saja copy kode dibawah ini.

        public function getToken($length)
{
$token = "";
$codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
$codeAlphabet.= "0123456789";
$max = strlen($codeAlphabet); // edited
   
for ($i=0; $i < $length; $i++) {
$token .= $codeAlphabet[random_int(0, $max-1)];
}
   
return $token;
}

Cara memanggil dari fungsi yang telah dijabarkan.

<?php echo getToken(10) ?>

Semoga bisa membantu ..

Cara menggunakan cara membuat token php

Muhammad Miftahul Ulum

MuhammadMiftahulUlum.com merupakan blog informasi didirikan mulai tahun 2014 blog ini berbagi tentang informasi dari pengalaman, tips dan trik, komentar dari sisi penulis. Saya adalah seorang yang selalu ingin belajar tentang banyak hal dan membagikan apapun tentang banyak hal.