Yii2 – Security Exposed – Part I

securityMencoba sharing hal yang lebih serius yaitu tentang security CMIIW.

“Yii2 secure?”, Tunggu dulu sob, Yii2 sebagai framework memang secure namun hal itu tidak serta merta membuat Aplikasi yang kita bangung berbasis Yii2 juga secure. Yii2 sudah menyediakan hampir semua tools untuk security.

Ada beberapa hal yang perlu kita benar2 serius memperhatikannya:
1. User Data Restricted
User iseng bisa mengakses data (bukan action lho) yang seharusnya tidak boleh dia akses. Contoh url seperti ini \profile?edit=1 untuk melakukan update profile. Jika kita tidak melakukan checking lagi, maka ketika user mengganti nilai dari parameter edit maka user akan bisa mengedit data profile punya user lain. Ini bukan hanya tentang url tapi juga pada form misal kode menyedihkan ini user->id ?> > atau yang lainnya.
Solusi: Check, check dan check. Jangan percaya user input. Gunakan scope bisa via model bisa dibuat rule via RBAC.

2. Automatic Model Attribute Loaded
Kita perlu berhati2 menggunakan fungsi $model->load(Yii::$app->request->post())
Apa yang salah? gak ada yang salah, hanya saja dengan fungsi ini semua attribute model akan terload, sehingga jika kita sembrono maka user iseng bisa memanipulasi value dari field2 yang harusnya gak boleh diisi.
Solusi : gunakan scenario yaitu hanya mengizinkan field2 tertentu saja untuk diedit user. Kalau perlu set default value field2 tertentu.

3. Fungsi search pada ModelSearch
Hasil generate Gii ini mengerikan..

if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}</p>
<p style="text-align: justify;">

Kode diatas mengindikasikan ketika validasi pencarian gagal maka semua data akan ditampilkan tanpa filter.
Solusi: modifikasi hasil generate Gii terutama pada action search.

4. XSS Attack
By default hasil generate Gii tidak memperhatikan tentang ini. XSS Attack bisa terjadi untuk banyak kondisi, misalnya Anda membuat CRUD Data Artikel. Code hasil generate Gii Anda gunakan mentah2.. hanya fokus ke UI.. Jika itu yang dilakukan selesai sudah Aplikasi Anda hehe
Solusi:

  • Baca lagi http://www.yiiframework.com/doc-2.0/yii-helpers-htmlpurifier.html
  • Gunakan selalu option encode pada Html text terutama jika datanya dinamis.

5. Validate User Input Data
Sekali lagi, jangan percaya input data dari user (praduga bersalah)
Contoh : nyubitol code atau hasil generate Gii untuk menyimpan data

if($artikel->load(Yii::$app->request->post())){
if($artikel->save()) {
// print success
}
}</p>
<p style="text-align: justify;">

Solusi: validate dulu mas bro..

if($artikel->validate() and $artikel->save()) {
// print success
}

dan baca lagi

https://github.com/yiisoft/yii2/blob/master/docs/guide/input-validation.md

Itu dulu ya om.. mudah2an manfaat.

Perlu professional security tester & advice for Your Application, PM me or call me 081559915720 :)

3 Comments
  1. Anonymous
  2. HunterXproject
    • man

Leave a Reply

Your email address will not be published. Required fields are marked *