Meng-enkripsi URL di Codeigniter
Proses mengirim data ID primary key atau id di URL sering KITA lakukan sebagai para developer website terutama di Codeigniter.
ID primary key atau id di URL merupakan data vital. Karena ID primary key atau id di URL mewakili data tertentu dan setiap data memeiliki ID yang uniqe atau tidak sama antara satu dengan lainnya.
Contohnya:
www.mysite.com/edit_data/1
Pada url diatas merupakan contoh penerapan ID pada url, ID primary key dapat diketahui secara jelas. Tentunya hal ini cukup berbahaya dan riskan karena ID tersebut dapat dimanipulasi dan disalahgunakan. Untuk mencegah dan menanggulangi hal tersebut, kita dapat melakukan proteksi menjadi seperti dibawah ini supaya lebih aman.
www.mysite.com/edit_data/Umhxc2ZDeHlpc1JpYWNIUVdzNG1sZz99
Terus bagaimana cara mengatasi hal ini ?
Cara Mengenkripsi URL di CodeIgniter
Sebetulnya CodeIgniter sudah mempunyai library untuk melakukan enkripsi, namun enkripsi yang digunakan kurang efisien jika digunakan untuk mengenkripsi ID pada URL.
langkah pertama, copas kode dibawah ini dan simpan di folder /application/helper/ dengan nama security.ini
Kodenya
[security] encryption_key=1111111111111111 ;16 digits iv=2456378494765431 ;16 digits encryption_mechanism=aes-256-cbc
Note : * Ganti nilai
iv
sesuai dengan keinginan namun harus berjumalh 16 digit
Kemudian buat file security
_helper.php
pada folder /application/helper/
dan isikan dengan kode dibawah iniKodenya
<?php if (!defined("BASEPATH")) exit("No direct script access allowed"); function encrypt_url($string) { $output = false; /* * read security.ini file & get encryption_key | iv | encryption_mechanism value for generating encryption code */ $security = parse_ini_file("security.ini"); $secret_key = $security["encryption_key"]; $secret_iv = $security["iv"]; $encrypt_method = $security["encryption_mechanism"]; // hash $key = hash("sha256", $secret_key); // iv – encrypt method AES-256-CBC expects 16 bytes – else you will get a warning $iv = substr(hash("sha256", $secret_iv), 0, 16); //do the encryption given text/string/number $result = openssl_encrypt($string, $encrypt_method, $key, 0, $iv); $output = base64_encode($result); return $output; } function decrypt_url($string) { $output = false; /* * read security.ini file & get encryption_key | iv | encryption_mechanism value for generating encryption code */ $security = parse_ini_file("security.ini"); $secret_key = $security["encryption_key"]; $secret_iv = $security["iv"]; $encrypt_method = $security["encryption_mechanism"]; // hash $key = hash("sha256", $secret_key); // iv – encrypt method AES-256-CBC expects 16 bytes – else you will get a warning $iv = substr(hash("sha256", $secret_iv), 0, 16); //do the decryption given text/string/number $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv); return $output; }
Lalu edit file
autoload.php
yang terdapat di /application/config/
, pada $autoload[‘helper’]
tambahkan security
Kodenya
$autoload['helper']= array('security');
Untuk melakukan enkripsi urlnya, tinggal memanggil
encrypt_url($id);
Contoh Kodenya:
<a href='<?=base_url("user/edit/".encrypt_url($id)."")' class="btn"></a>
Dan untuk melakukan decrypnya (membuka id yang di encrypt) dapat menggunakan
decrypt_url($id);
Kodenya
public function edit($id_user) { $id_user= decrypt_url($id_user); }
Done.. Hore...