Selasa, 14 Mei 2013

Mencegah CSRF pada PHP

Leave a Comment

Keamanan dari suatu aplikasi sangat lah penting, bebicara soal keamanan sangat luas cakupannya maka dari itu kali ini saya hanya akan membahas salah satunya yaitu menganai CSRF(dilafalkan “sea-surf”).

Apa itu CSRF ?
CSRF atau Cross Site Request Forgeries adalah sebuah celah keamanan dimana aplikasi web terlalu mempercayai sebuah request walaupun request tersebut bukan berasal dari inisiatif pengguna.
Sebagai contoh :
Saya memiliki website,  dan saya adalah administrator.  Untuk mengakses halaman administrator saya diwajibka untuk login, disana ada saya dapat melakukan proses administrasi seperti membuat atau menghapus artikel. Untuk menghapus artikel saya dapat mengaksesnya dengan url :
www.websaya.com/artikel.php?action=hapus&id=1
maka setelah saya mengakses url  tersebut  artikel dengan id 1 akan terhapus
seseorang tidak dapat mengakses url tersebut karena sistem hanya akan melayani user yang telah login yaitu saya.
Lalu bagaimana CSRF bekerja?
Lalu ada sesorang  yang jahil mengetahui struktur url anda untuk menghapus artikel. Namun dia tidak dapat mengakse url tersebut dikarenakan dia tidak memiliki hak akses kehalaman administrasi anda. Lalu dengan cerdik dia menjebak anda dengan  dengan cara dia member anda link sebagai berikut
 
Dan anda tertarik untuk mengkliknya , dengan tidak sengaja anda telah menghapus artikel anda sendiri tanpa disengaja.
Atau bisa saja dengan sembunyi-sembunyi dia menyembunyikan tag sebagai berikut
<img src=”www.websaya.com/artikel.php?action=hapus&id=1”/>
Saat anda membuka website yang mengandung tag tersebut  artikel anda akan terhapus 

Lalu apa solusinya?
Begini , 
Untuk menampilkan link untuk manghapus saya menggunakan script berikut:
<?php

Session_start();
$_SESSION['token'] = md5(uniqid());
echo '<a href=”www.websaya.com/artikel.php?action=hapus&id=1”>Hapus</a>';
?>
Apa fungsinya session denga nama token?
Jadi begini saat anda mengakses halaman yang berisi link untuk menghapus artikel tersebut maka secara otomatis akan membuat session dengan value hash yang unik.
Apa gunanya…?
Saat anda ingin menghapus artikel  misal begini scriptnya
<?php
$id = $_GET[‘id’];
If(!isset($id) || empty($id)){
                //tidak manghapus karena id tidak ada atau kosong
} else {
                $token = $_SESSION[‘token’];
unset($_SESSION['token']);
if(empty($token)){
                //kemungkinan CSRF
} else {
                //hapus artikel disini
}
}
Begini penjelasannya pertama token yang telah terbuat saya simpan kedalam variable $token
Lalu saya mengosongkan session  token sehingga session yang tercipta dari link hapus akan berubah secara dinamis,lalau sebelum maghapus artikel  saya mengecek terlebih dahulu variable $token kosong atau tidak jika tidak artikel di hapus.
Dengan begini jika link berasal dari website lain maka tidak akan tercipta session token yang artinya perintah untuk mengahapus artikel tidak dapat di ekseskusi.
Selamat mecoba…..!


0 komentar:

Posting Komentar