CodeIgniter - Keamanan
Pencegahan XSS
XSS berarti pembuatan skrip lintas situs. CodeIgniter hadir dengan keamanan penyaringan XSS. Filter ini akan mencegah kode JavaScript berbahaya atau kode lain yang mencoba membajak cookie dan melakukan aktivitas berbahaya. Untuk memfilter data melalui filter XSS, gunakanxss_clean() metode seperti yang ditunjukkan di bawah ini.
$data = $this->security->xss_clean($data);
Anda harus menggunakan fungsi ini hanya saat Anda mengirimkan data. Parameter Boolean kedua opsional juga dapat digunakan untuk memeriksa file gambar untuk serangan XSS. Ini berguna untuk fasilitas upload file. Jika nilainya benar, berarti gambar tersebut aman dan bukan sebaliknya.
Pencegahan Injeksi SQL
Injeksi SQL adalah serangan yang dilakukan pada kueri database. Di PHP, kami menggunakanmysql_real_escape_string() berfungsi untuk mencegah hal ini bersama dengan teknik lain tetapi CodeIgniter menyediakan fungsi dan pustaka bawaan untuk mencegah hal ini.
Kami dapat mencegah SQL Injection di CodeIgniter dengan tiga cara berikut -
- Keluar dari Kueri
- Query Biding
- Kelas Rekaman Aktif
Keluar dari Kueri
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape() fungsi secara otomatis menambahkan tanda kutip tunggal di sekitar data dan menentukan tipe data sehingga data hanya dapat lolos dari data string.
Query Biding
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
Pada contoh di atas, tanda tanya (?) Akan diganti dengan array pada parameter kedua dari fungsi query (). Keuntungan utama membangun kueri dengan cara ini adalah bahwa nilai-nilai secara otomatis di-escape yang menghasilkan kueri yang aman. Mesin CodeIgniter melakukannya untuk Anda secara otomatis, jadi Anda tidak perlu mengingatnya.
Kelas Rekaman Aktif
<?php
$this->db->get_where('subscribers_tbl',array
('status'=> active','email' => '[email protected]'));
?>
Menggunakan rekaman aktif, sintaks kueri dibuat oleh setiap adaptor database. Ini juga memungkinkan kueri yang lebih aman, karena nilainya keluar secara otomatis.
Menyembunyikan Kesalahan PHP
Dalam lingkungan produksi, kami seringkali tidak ingin menampilkan pesan kesalahan apapun kepada pengguna. Ini bagus jika diaktifkan di lingkungan pengembangan untuk tujuan debugging. Pesan kesalahan ini mungkin berisi beberapa informasi, yang tidak boleh kami perlihatkan kepada pengguna situs untuk alasan keamanan.
Ada tiga file CodeIgniter yang terkait dengan kesalahan.
Tingkat Pelaporan Kesalahan PHP
Lingkungan yang berbeda membutuhkan tingkat pelaporan kesalahan yang berbeda. Secara default, pengembangan akan menampilkan kesalahan tetapi pengujian dan live akan menyembunyikannya. Ada file bernamaindex.phpdi direktori root CodeIgniter, yang digunakan untuk tujuan ini. Jika kita memberikan nol sebagai argumen keerror_reporting() berfungsi maka itu akan menyembunyikan semua kesalahan.
Kesalahan Database
Bahkan jika Anda telah mematikan kesalahan PHP, kesalahan MySQL masih terbuka. Anda dapat mematikannya diapplication/config/database.php. Mengaturdb_debug opsi di $db array ke FALSE seperti gambar dibawah.
$db['default']['db_debug'] = FALSE;
Catatan eror
Cara lain adalah mentransfer kesalahan ke file log. Jadi, itu tidak akan ditampilkan kepada pengguna di situs. Cukup, setellog_threshold menghargai $config array ke 1 in application/cofig/config.php file seperti yang ditunjukkan di bawah ini.
$config['log_threshold'] = 1;
Pencegahan CSRF
CSRF adalah singkatan dari pemalsuan permintaan lintas situs. Anda dapat mencegah serangan ini dengan mengaktifkannya diapplication/config/config.php file seperti yang ditunjukkan di bawah ini.
$config['csrf_protection'] = TRUE;
Saat Anda membuat formulir menggunakan form_open()fungsi, secara otomatis akan memasukkan CSRF sebagai bidang tersembunyi. Anda juga dapat menambahkan CSRF secara manual menggunakanget_csrf_token_name() dan get_csrf_hash()fungsi. Ituget_csrf_token_name() fungsi akan mengembalikan nama CSRF dan get_csrf_hash() akan mengembalikan nilai hash CSRF.
Token CSRF dapat dibuat ulang setiap kali untuk dikirimkan atau Anda juga dapat menjaganya tetap sama selama masa pakai cookie CSRF. Dengan mengatur nilainyaTRUE, dalam larik konfigurasi dengan kunci ‘csrf_regenerate’ akan membuat ulang token seperti yang ditunjukkan di bawah ini.
$config['csrf_regenerate'] = TRUE;
Anda juga dapat memasukkan URL ke daftar putih dari proteksi CSRF dengan mengaturnya dalam larik konfigurasi menggunakan kunci ‘csrf_exclude_uris’seperti gambar dibawah. Anda juga dapat menggunakan ekspresi reguler.
$config['csrf_exclude_uris'] = array('api/person/add');
Penanganan Kata Sandi
Banyak pengembang tidak tahu cara menangani kata sandi dalam aplikasi web, yang mungkin itulah sebabnya banyak peretas merasa begitu mudah untuk membobol sistem. Seseorang harus mengingat poin-poin berikut saat menangani kata sandi -
JANGAN menyimpan sandi dalam format teks biasa.
Selalu hash kata sandi Anda.
JANGAN gunakan Base64 atau pengkodean serupa untuk menyimpan kata sandi.
JANGAN gunakan algoritme hashing yang lemah atau rusak seperti MD5 atau SHA1. Hanya gunakan algoritma hashing kata sandi yang kuat seperti BCrypt, yang digunakan dalam fungsi Hashing Kata Sandi PHP sendiri.
JANGAN pernah menampilkan atau mengirim kata sandi dalam format teks biasa.
JANGAN memberi batasan yang tidak perlu pada kata sandi pengguna Anda.