Keamanan Phalcon

Komponen ini membantu pengembang dalam tugas-tugas Keamanan Phalcon umum seperti password hashing dan Perlindungan Cross-Site Request Forgery (CSRF).

Password Hashing 

Menyimpan password dalam teks biasa adalah praktek keamanan yang buruk. Siapapun dengan akses ke database akan segera memiliki akses ke semua account pengguna sehingga mampu untuk melakukan hal-hal yang tidak bertanggungjawab. Untuk mengatasi itu, banyak aplikasi menggunakan metode hashing satu arah “md5” dan “sha1“. Namun, hardware berkembang setiap hari, dan menjadi lebih cepat, algoritma ini menjadi rentan terhadap serangan brute force. Serangan ini juga dikenal sebagai rainbow table.

Untuk mengatasi masalah ini kita dapat menggunakan algoritma hash dgn  bcrypt. Mengapa bcrypt? Berkat algoritma key setup “Eksblowfish ” kita dapat membuat enkripsi password se-“lambat” yang kita inginkan. Algoritma yang lambat membuat proses untuk menghitung password sebenarnya di balik hash sangat sulit bahkan  mustahil. Ini akan melindungi Anda untuk waktu yang lama dari serangan yg mungkin menggunakan tabel pelangi.

Komponen ini memberikan Anda kemampuan untuk menggunakan algoritma ini dengan cara yang sederhana:

<?php

use Phalcon\Mvc\Controller;

class UsersController extends Controller
{

    public function registerAction()
    {

        $user = new Users();

        $login = $this->request->getPost('login');
        $password = $this->request->getPost('password');

        $user->login = $login;

        //Store the password hashed
        $user->password = $this->security->hash($password);

        $user->save();
    }

}

Kita menyimpan password hash dengan work factor default. Work factor yang lebih tinggi akan membuat password tidak rentan dibajak karena proses enkripsi yang akan dijalankan lambat. Kita bisa memeriksa apakah password cocok dgn cara sebagai berikut:

<?php

use Phalcon\Mvc\Controller;

class SessionController extends Controller
{

    public function loginAction()
    {

        $login = $this->request->getPost('login');
        $password = $this->request->getPost('password');

        $user = Users::findFirstByLogin($login);
        if ($user) {
            if ($this->security->checkHash($password, $user->password)) {
                //The password is valid
            }
        }

        //The validation has failed
    }

}

Salt dihasilkan dengan menggunakan pseudo-random byte dengan fungsi PHP openssl_random_pseudo_bytes sehingga wajib menginstal ekstensi openssl.

Perlindungan Cross-Site Request Forgery (CSRF) 

Ini adalah salah satu serangan yg umum terjadi terhadap situs web dan aplikasi. Formulir yg dirancang untuk melakukan tugas-tugas seperti pendaftaran pengguna atau menambahkan komentar rentan terhadap serangan ini.

Idenya adalah untuk mencegah nilai-nilai form dikirim di luar aplikasi kita. Untuk memperbaiki hal ini, kita menghasilkan Nonce acak (token) dalam setiap form, tambahkan token dalam sesi dan kemudian memvalidasi token setelah data formulir posting kembali ke aplikasi kita dengan membandingkan token disimpan dalam sesi dengan yang disampaikan oleh form:

<?php echo Tag::form('session/login') ?>

    <!-- login and password inputs ... -->

    <input type="hidden" name="<?php echo $this->security->getTokenKey() ?>"
        value="<?php echo $this->security->getToken() ?>"/>

</form>

Kemudian dalam aksi controller Anda dapat memeriksa apakah token CSRF benar:

<?php

use Phalcon\Mvc\Controller;

class SessionController extends Controller
{

    public function loginAction()
    {
        if ($this->request->isPost()) {
            if ($this->security->checkToken()) {
                //The token is ok
            }
        }
    }

}

Ingatlah untuk menambahkan adapter sesi untuk Dependency Injector, jika tidak pengecekan token tidak akan bekerja:

$di->setShared('session', function() {
    $session = new Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
});

Menambahkan captcha pada form ini juga dianjurkan untuk sepenuhnya menghindari resiko serangan ini.

Menyiapkan komponen 

Komponen ini secara otomatis terdaftar dalam wadah pelayanan sebagai ‘security’, Anda dapat mendaftar ulang itu untuk setup opsi yg tersedia:

<?php

$di->set('security', function(){

    $security = new Phalcon\Security();

    //Set the password hashing factor to 12 rounds
    $security->setWorkFactor(12);

    return $security;
}, true);

Sumber eksternal 

  • Vökuró , adalah contoh aplikasi yang menggunakan komponen keamanan untuk menghindari CSRF dan kata sandi hashing, [ Github ]

Terjemahan dr Keamanan Phalcon http://docs.phalconphp.com/en/latest/reference/security.html