Keamanan
Halaman ini menjelaskan beberapa "praktik terbaik" mengenai keamanan web, dan fitur internal rincian CodeIgniter keamanan.
URI Keamanan
CodeIgniter cukup ketat tentang karakter yang memungkinkan dalam string URI Anda untuk membantu meminimalkan kemungkinan bahwa data berbahaya dapat dikirimkan ke aplikasi Anda. URI hanya dapat berisi sebagai berikut:
- Alpha-numerik teks
- Tilde: ~
- Periode:.
- Colon::
- Underscore: _
- Dash: -
GET, POST, dan Data COOKIE
GET data hanya dilarang oleh CodeIgniter karena sistem menggunakan segmen URI daripada string URL query tradisional (kecuali Anda memiliki pilihan query string diaktifkan pada file konfigurasi Anda). Array GET global tidak diset oleh kelas Masukan selama inisialisasi sistem.
Register_globals
Selama inisialisasi sistem semua variabel global yang diset, kecuali yang ditemukan dalam $ _POST dan $ _COOKIE array. Rutinitas unsetting secara efektif sama seperti register_globals = off.
Dalam lingkungan produksi, itu biasanya diinginkan untuk menonaktifkan pelaporan kesalahan PHP dengan menetapkan bendera error_reporting internal untuk nilai 0. Ini menonaktifkan kesalahan asli PHP dari yang diberikan sebagai output, yang berpotensi mungkin berisi informasi sensitif. Mengatur LINGKUNGAN CodeIgniter yang konstan dalam index.php dengan nilai akan menonaktifkan kesalahan ini. Dalam modus pembangunan, dianjurkan bahwa nilai 'pembangunan' digunakan. Informasi lebih lanjut tentang membedakan antara lingkungan dapat ditemukan pada Penanganan Lingkungan halaman.
magic_quotes_runtime
Direktif magic_quotes_runtime dimatikan selama inisialisasi sistem sehingga Anda tidak perlu menghapus garis miring ketika mengambil data dari database Anda.
Praktik Terbaik
Sebelum menerima data ke dalam aplikasi Anda, apakah itu data POST dari pengiriman formulir, data cookie, data URI, XML-RPC data, atau bahkan data dari array SERVER, anda dianjurkan untuk praktek ini tiga langkah pendekatan:
- Menyaring data seolah-olah itu tercemar.
- Validasi data untuk memastikan itu sesuai dengan jenis yang tepat, panjang, ukuran, dll (kadang-kadang langkah ini dapat menggantikan satu langkah)
- Escape data sebelum mengirimkan ke dalam database Anda.
CodeIgniter menyediakan fungsi-fungsi berikut untuk membantu dalam proses ini:
CodeIgniter dilengkapi dengan Cross Site Scripting filter. Filter ini mencari teknik yang umum digunakan untuk menanamkan Javascript berbahaya ke dalam data Anda, atau jenis lain dari kode yang mencoba untuk membajak cookie atau melakukan hal-hal berbahaya lainnya. Filter XSS dijelaskan di sini . Memiliki Kelas Validasi Form yang membantu Anda dalam memvalidasi, penyaringan, dan prepping data Anda. - Melarikan diri semua data sebelum penyisipan database yang
Jangan pernah memasukkan informasi ke dalam database Anda tanpa melarikan diri itu. Silakan lihat bagian yang membahas permintaan untuk informasi lebih lanjut.
Keamanan Kelas
Kelas Keamanan berisi metode yang membantu Anda membuat aplikasi yang aman, pengolahan data masukan untuk keamanan.
XSS Penyaringan
CodeIgniter dilengkapi dengan filter Hack Site Scripting Palang pencegahan yang dapat dijalankan secara otomatis menyaring semua POST dan data COOKIE yang dihadapi, atau Anda dapat menjalankannya secara per item. Secara default tidak dijalankan secara global karena memerlukan sedikit pengolahan overhead, dan karena Anda mungkin tidak perlu dalam semua kasus. Filter XSS mencari teknik yang umum digunakan untuk memicu Javascript atau jenis lain dari kode yang mencoba untuk membajak cookie atau melakukan hal-hal berbahaya lainnya. Jika sesuatu dilarang ditemui itu diberikan aman dengan mengkonversi data ke entitas karakter.
Catatan: Fungsi ini hanya harus digunakan untuk berurusan dengan data yang telah dikirimkan. Ini bukan sesuatu yang harus digunakan untuk pengolahan runtime umum karena memerlukan cukup banyak overhead pemrosesan. Untuk menyaring data melalui filter XSS menggunakan fungsi ini:
$ This-> keamanan> xss_clean ()
Berikut adalah contoh penggunaan:
$data = $this->security->xss_clean($data);
Jika Anda ingin filter untuk menjalankan secara otomatis setiap kali pertemuan atau data POST COOKIE Anda dapat mengaktifkannya dengan membuka aplikasi Anda / config / config.php file dan pengaturan ini:
$config['global_xss_filtering'] = TRUE;
Catatan: Jika Anda menggunakan kelas validasi form, memberikan anda pilihan untuk XSS filtering juga. Parameter opsional kedua, is_image, memungkinkan fungsi ini akan digunakan untuk menguji gambar untuk serangan XSS potensial, berguna untuk keamanan file upload. Saat ini parameter kedua disetel ke TRUE, bukannya kembali string diubah, fungsi mengembalikan TRUE jika gambar tersebut aman, dan FALSE jika berisi informasi berpotensi berbahaya yang mungkin mencoba browser untuk mengeksekusi.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{ // file failed the XSS test }
$ This-> keamanan> sanitize_filename ()
Ketika menerima nama file dari input pengguna, yang terbaik adalah untuk membersihkan mereka untuk mencegah traversal direktori dan masalah keamanan lainnya yang terkait. Untuk melakukannya, gunakan sanitize_filename () metode kelas Keamanan. Berikut adalah suatu contoh:
$filename = $this->security->sanitize_filename($this->input->post('filename'));
Jika diterima untuk input pengguna untuk menyertakan path relatif, misalnya file / di / beberapa / disetujui / folder.txt, Anda dapat mengatur parameter opsional kedua, $ relative_path ke TRUE.
$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
Cross-situs permintaan pemalsuan (CSRF)
Anda dapat mengaktifkan perlindungan CSRF dengan membuka aplikasi Anda / config / config.php file dan pengaturan ini:
$config['csrf_protection'] = TRUE;
Jika Anda menggunakan helper form yang form_open () fungsi secara otomatis akan menyisipkan sebuah field tersembunyi dalam bentuk CSRF Anda.
Keamanan Helper
File Pembantu Keamanan berisi fungsi keamanan terkait.
Memuat Helper ini
Pembantu ini dimuat dengan menggunakan kode berikut:
$this->load->helper('security');
Fungsi berikut tersedia:
xss_clean ()
Menyediakan penyaringan Script Hack Situs Cross. Fungsi ini merupakan alias untuk satu di kelas input . Info lebih lanjut dapat ditemukan di sana.
sanitize_filename ()
Menyediakan perlindungan terhadap traversal direktori. Fungsi ini merupakan alias untuk satu di kelas Keamanan . Info lebih lanjut dapat ditemukan di sana.
do_hash ()
Memungkinkan Anda untuk membuat hash satu cara SHA1 atau MD5 cocok untuk mengenkripsi password. Akan menciptakan SHA1 secara default. Contoh:
$str = do_hash($str); // SHA1 $str = do_hash($str, 'md5'); // MD5
Catatan: Fungsi ini sebelumnya bernama dohash (), yang telah usang dalam mendukung do_hash ().
strip_image_tags ()
Ini adalah fungsi keamanan yang akan strip tag gambar dari sebuah string. Ini meninggalkan URL gambar sebagai teks biasa.
$string = strip_image_tags($string);
encode_php_tags ()
Ini adalah fungsi keamanan yang mengkonversi tag PHP untuk entitas. Catatan: Jika Anda menggunakan fungsi penyaringan XSS itu ini secara otomatis.
$string = encode_php_tags($string);
CodeIgniter 1.7.2 Keamanan patch
Memperbaiki Sebuah telah diimplementasikan untuk cacat keamanan di CodeIgniter 1.7.2. Anda dapat memperoleh memperbaiki baik dengan men-download salinan CodeIgniter, atau men-download ini patch yang mandiri . Semua aplikasi menggunakan kelas Upload File harus menginstal patch untuk memastikan bahwa aplikasi mereka tidak tunduk pada kerentanan. Sementara memperbaiki bug ini, kami mengambil kesempatan untuk melakukan perbaikan untuk kemampuan kelas Upload untuk memungkinkan nama file menimpa. Sebelumnya, Anda perlu melakukan sedikit tarian di controller Anda untuk menghapus ekstensi dari nama file jika Anda mulai dari input pengguna; tidak bisa Anda menimpa ekstensi file. Sekarang ketika menggunakan "nama_file" config menimpa, Anda akan memasok nama file lengkap, termasuk ekstensi, benar-benar menimpa nama file yang disediakan oleh agen pengguna klien. Setelah menerapkan patch, Anda akan perlu menyesuaikan kode Anda sesuai jika Anda menggunakan 'nama_file' menimpa di kelas Upload. Meskipun kami tidak dalam kebiasaan membuat perubahan kode dalam versi yang memiliki potensi untuk merusak kompatibilitas, perubahan ini diperlukan sebagai bagian dari memperbaiki keamanan. Jika Anda menggunakan CodeIgniter dari repositori Mercurial di BitBucket , pastikan Anda menarik file-file terbaru. Versi 1.7.2 telah bercabang dan retagged untuk memasukkan memperbaiki hal ini. Kami ingin mengucapkan terima kasih CodeIgniter pengguna alexaholic untuk membawa ini untuk perhatian kita. Keamanan selalu merupakan prioritas utama untuk produk kami, dan kami membuat diri kita tersedia untuk langsung dihubungi untuk setiap masalah keamanan.