Phalcon - Fitur Keamanan
Phalcon menyediakan fitur keamanan dengan bantuan komponen Keamanan, yang membantu dalam melakukan tugas-tugas tertentu seperti hashing kata sandi dan Cross-Site Request Forgery (CSRF).
Hashing Password
Hashingdapat didefinisikan sebagai proses mengubah string bit panjang tetap menjadi panjang tertentu sedemikian rupa sehingga tidak dapat dibalik. Setiap perubahan dalam string input akan mengubah nilai data berciri.
Dekripsi data hash terjadi dengan mengambil nilai yang dimasukkan oleh pengguna sebagai input dan membandingkan bentuk hash yang sama. Biasanya untuk aplikasi berbasis web apa pun, menyimpan sandi sebagai teks biasa adalah praktik yang buruk. Ini rentan terhadap serangan pihak ketiga karena mereka yang memiliki akses ke database dapat dengan mudah mendapatkan kata sandi untuk setiap pengguna.
Phalcon menyediakan cara mudah untuk menyimpan kata sandi dalam bentuk terenkripsi yang mengikuti algoritma seperti md5, base64 atau sh1.
Seperti yang terlihat pada bab sebelumnya, di mana kami membuat proyek untuk blog. Layar login menerima masukan sebagai nama pengguna dan kata sandi untuk pengguna. Untuk menerima kata sandi dari pengguna dan mendekripsi dalam bentuk tertentu, potongan kode berikut digunakan.
Kata sandi yang didekripsi kemudian dicocokkan dengan kata sandi yang diterima sebagai masukan dari pengguna. Jika nilainya cocok, pengguna berhasil masuk ke aplikasi web jika tidak pesan kesalahan akan ditampilkan.
<?php
class UsersController extends Phalcon\Mvc\Controller {
public function indexAction() {
}
public function registerUser() {
$user = new Users();
$login = $this->request->getPost("login");
$password = $this->request->getPost("password");
$user->login = $login;
// Store the hashed pasword
$user->password = $this->security->sh1($password);
$user->save();
}
public function loginAction() {
if ($this->request->isPost()) {
$user = Users::findFirst(array(
'login = :login: and password = :password:',
'bind' => array(
'login' => $this->request->getPost("login"),
'password' => sha1($this->request->getPost("password"))
)
));
if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'users',
'action' => 'index'
));
}
$this->session->set('auth', $user->id);
$this->flash->success("You've been successfully logged in");
}
return $this->dispatcher->forward(array(
'controller' => 'posts',
'action' => 'index'
));
}
public function logoutAction() {
$this->session->remove('auth');
return $this->dispatcher->forward(array(
'controller' => 'posts',
'action' => 'index'
));
}
}
Kata sandi yang disimpan dalam basis data dalam format terenkripsi sh1 algoritma.
Setelah pengguna memasukkan nama pengguna dan kata sandi yang sesuai, pengguna dapat mengakses sistem, jika tidak, pesan kesalahan akan ditampilkan sebagai validasi.
Pemalsuan Permintaan Lintas Situs (CSRF)
Ini adalah serangan yang memaksa pengguna aplikasi web yang diautentikasi untuk melakukan tindakan tertentu yang tidak diinginkan. Formulir yang menerima masukan dari pengguna rentan terhadap serangan ini. Phalcon mencoba mencegah serangan ini dengan melindungi data yang dikirim melalui formulir di luar aplikasi.
Data dalam setiap formulir diamankan dengan bantuan pembuatan token. Token yang dihasilkan bersifat acak dan dicocokkan dengan token yang kami kirimkan data formulir (kebanyakan di luar aplikasi web melalui metode POST).
Kode:
<?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>
Note - Penting untuk menggunakan adaptor sesi saat mengirim token formulir, karena semua data akan disimpan dalam sesi tersebut.
Sertakan adaptor sesi dalam services.php menggunakan kode berikut.
/**
* Start the session the first time some component request the session service
*/
$di->setShared('session', function () {
$session = new SessionAdapter();
$session->start();
return $session;
});