0 follower

Keamanan

1. Penjagaan Penaskahan Situs-silang

Cross-site scripting atau penaskahan Situs-silang (juga dikenal sebagai XSS) terjadi saat aplikasi web mengumpulkan data berbahaya dari pengguna. Penyerang sering akan menginjeksi JavaScript, VBScript, ActiveX, HTML, atau Flash ke dalam aplikasi yang mudah diserang guna menipu aplikasi pengguna lain dan mengumpulkan data darinya. Sebagai contoh, sistem forum yang asal didesain mungkin menampilkan input pengguna dalam tulisan forum tanpa pemeriksaan apapun. Penyerang bisa menginjeksi bagian kode JavaScript berbahaya ke dalam tulisan dengan demikian ketika pengguna lain membaca tulisan ini, JavaScript berjalan tanpa diharapkan pada komputernya.

Salah satu ukuran penting untuk menjaga serangan XSS adalah memeriksa input pengguna sebelum menampilkannya. Orang bisa melakukan enkode-HTML dengan input pengguna untuk melaksanakan tujuan ini. Akan tetapi, dalam beberapa situasi, enkode-HTML mungkin tidak disukai karena ia mematikan semua tag HTML.

Yii menyertakan pekerjaan HTMLPurifier dan menyediakan komponen berguna bagi pengembang bernama CHtmlPurifier yang melapisi HTMLPurifier. Komponen ini mampu menghapus semua kode berbahaya dengan audit mendalam, aman dan memastikan konten yang disaring sesuai standar.

Komponen CHtmlPurifier dapat dipakai baik sebagai widget ataupun filter. Ketika dipakai sebagai widget, CHtmlPurifier akan memurnikan konten yang ditampilkan dalam badan tampilannya. Sebagai contoh,

<?php $this->beginWidget('CHtmlPurifier'); ?>
...display user-entered content here...
<?php $this->endWidget(); ?>

2. Penjagaan Pemalsuan Permintaan Situs-silang

Serangan Cross-Site Request Forgery (CSRF) atau Penjagaan Pemalsuan Permintaan Situs-silang terjadi saat situs web berbahaya menyebabkan browser web pengguna untuk melakukan aksi yang tidak diinginkan pada situs aman. Sebagai contoh, situs web berbahaya mempunyai halaman yang berisi gambar di mana tag src merujuk ka situs bank: http://bank.example/withdraw?transfer=10000&to=someone. Jika pengguna yang memiliki cookie login untuk situs perbankan mengunjungi halaman berbahaya ini, aksi pentransferan 10000 dollars kepada someone akan dijalankan. Terbalik dengan situs-silang yang mengeksploitasi kepercayaan yang dimiliki pengguna pada situs tertentu, CSRF mengekploitasi kepercayaan yang dimiliki situs untuk pengguna tertentu.

Untuk menjaga serangan CSRF, penting untuk mematuhi aturan bahwa permintaan GET hanya diijinkan untuk mengambil data daripada mengubah setiap data pada server. Dan untuk permintaan POST, harus menyertakan nilai acak yang dapat dikenal oleh server guna memastikan formulir dan hasil yang dikirimkan dan hasil yang dikembalikan ke sumber yang sama.

Yii mengimplementasikan skema penjagaan CSRF untuk membantu mengalahkan serangan berbasis-POST. Ia didasarkan pada penyimpanan nilai acak di dalam cookie dan membandingkan nilai ini dengan nilai yang dikirimkan via permintaan POST.

Distandarkan, penjagaan CSRF dimatikan. UNtuk menghidupkannya, konfigurasi komponen aplikasi CHttpRequest dalam konfigurasi aplikasi seperti berikut,

return array(
    'components'=>array(
        'request'=>array(
            'enableCsrfValidation'=>true,
        ),
    ),
);

Dan untuk menampilkan formulir, panggil CHtml::form daripada menulis tag form HTM secara langsung Metode CHtml::form akan menyertakan nilai acak tertentu dalam field tersembunyi agar bisa dikirimkan untuk validasi CSRF.

Melindungi cookie dari serangan adalah hal yang sangat penting, karena ID sesi umumnya disimpan dalam cookie. Jika seseorang memegang ID sesi, pada dasarnya dia memiliki semua informasi sesi relevan.

Ada beberapa ukuran guna menjaga serangan terhadap cookie.

  • Aplikasi bisa menggunakan SSL untuk membuat kanal komunikasi aman dan hanya mengoper cookie terotentikasi melalui koneksi HTTPS. Penyerang tidak bisa men-decipher isi dalam cookie yang ditransfer.
  • Habiskan waktu sesi dengan benar, termasuk semua cookie dan token sesi untuk mengurangi serangan.
  • Jaga penaskahan situs-silang yang menyebabkan kode berbahaya dijalankan dalam browser pengguna dan mengekspos cookie yang dimilikinya.
  • Validasi data cookie dan deteksi apakah isinya diubah.

Yii mengimplementasikan skema validasi cookie yang menjaga serangan perubahan terhadap cookie. Sebenarnya, ia melakukan pemeriksaan HMAC atas nilai cookie jika validasi cookie dihidupkan.

Validasi cookie standarnya dimatikan. Untuk menghidupkannya, konfigurasi komponen aplikasi CHttpRequest dalam konfigurasi aplikasi seperti berikut,

return array(
    'components'=>array(
        'request'=>array(
            'enableCookieValidation'=>true,
        ),
    ),
);

Untuk menggunakan skema validasi cookie yang disediakan oleh Yii, kita juga harus mengakses cookie melalui koleksi cookies collection, daripada melalui $_COOKIES secara langsung:

// ambil cookie dengan nama yang ditetapkan
$cookie=Yii::app()->request->cookies[$name];
$value=$cookie->value;
......
// kirim cookie
$cookie=new CHttpCookie($name,$value);
Yii::app()->request->cookies[$name]=$cookie;