Sambungan dari:
Membuat Aplikasi PHP Yang Aman Bag. 1
2. Pergunakan Anti SQL Injection
SQL Injection merupakan teknik menyusupkan perintah SQL kedalam query dengan cara memanipulasi input data pada sebuah aplikasi. Anda bisa membaca dan mempelajari bagaimana SQL injection dapat terjadi di SQL Injetion Attack by Example.
Bagaimana menanggulanginya? Berikut adalah fungsi Anti SQL Injection yang sering saya pergunakan.
- function anti_sql_injection( $input ) {
- // daftarkan perintah-perintah SQL yang tidak boleh ada
- // dalam query dimana SQL Injection mungkin dilakukan
- "insert", "select", "update", "delete", "truncate",
- "replace", "drop", " or ", ";", "#", "--", "=" );
- // lakukan cek, input tidak mengandung perintah yang tidak boleh
- $breturn=true;
- foreach($aforbidden as $cforbidden) {
- if(strripos($input, $cforbidden)) {
- $breturn=false;
- break;
- }
- }
- return $breturn;
- }
Cara memanfaatkan fungsi tersebut adalah sebagai berikut (contoh pada proses login dimana SQL injection kerap dilakukan)
- if(anti_sql_injection($_POST['user']) and
- anti_sql_injection($_POST['password'])) {
- // lakukan proses login
- } else {
- }
Selain itu, SQL injection juga dapat dicegah dengan pengaturan priveleges pada database yang dipergunakan. Misalnya, bagian situs yang hanya berfungsi memperlihatkan data melalui query select menggunakan user dengan privelege select saja. Bagian situs yang berfungsi untuk memberi kesempatan pembaca untuk berkomentar menggunakan user dengan privelege insert saja dst.
3. Pergunakan session_regenerate_id() Untuk Pembuatan Session
Selintas penggunaan session adalah teknik yang aman untuk menjaga sebuah halaman agar tidak bisa dikunjungi oleh sembarang orang. Misalnya, pemanfaatan session untuk halaman administrasi sebuah situs. Namun, session pun memiliki titik kelemahan yang bisa dieksploitasi attacker dan dipergunakan sebagai senjata untuk menyerang sistem aplikasi.
Cara paling mudah untuk memanfaatkan session sebagai titik kelemahan sistem aplikasi adalah menggunakan metode fixation. Session faxation adalah metode dimana seorang attacker menyerang browser user sebelum login dilakukan. Yaitu dengan memasukkan id session untuk kemudian dimanfaatkan dengan tujuan tertentu.
Berikut adalah ilustrasi bagaimana session fixation dilakukan untuk menyerang keamanan sistem aplikasi berbasis web.
- if($_SESSION['id_user']<>13) {
- // Proses login (authentifikasi)
- // Jika login sukses, jalankan perintah dibawah ini
- $_SESSION['id_user']=13;
- } else {
- if($_SESSION['id_user']==13) {
- // lakukan proses A
- }
Script diatas adalah bagian dimana variable id_user (13) didaftarkan sebagai variable session JIKA pengunjung belum login dan login yang dilakukan sukses. Artinya, jika login pernah dilakukan maka halaman ini tidak akan melakukan proses login dan langsung melakukan proses A.
Langkah selanjutnya, pastikan bahwa browser yang digunakan bersih dari session sebelumnya. Lalu ketikan alamat script diatas dengan menambahkan PHPSESSID=1804.
Misalnya nama file script diatas adalah test.php dan diletakkan di server.com, maka yang harus Anda tuliskan adalah http://server.com/test.php?PHPSESSID=1804 dan lakukan login. Setelah itu, silakan Anda mencoba mengakses alamat tersebut diatas menggunakan browser lain atau komputer lain yang terhubung dengan server.com. Hasilnya, Anda akan melakukan proses A tanpa melakukan login!
Hal diatas terjadi akibat id session yang dipergunakan saat session dibentuk adalah sama dengan id session yang sebelumnya telah diketikkan secara "paksa" dalam URL. Untuk menanggulangi hal ini, diperlukan fungsi untuk meng-generate ulang id session yaitu dengan menggunakan fungsi session_regenerate_id() sehingga bagian script diatas menjadi seperti dibawah ini:
- if($_SESSION['id_user']<>13) {
- // Proses login (authentifikasi)
- // Jika login sukses, jalankan perintah dibawah ini
- $_SESSION['id_user']=13;
- } else {
- if($_SESSION['id_user']==13) {
- // lakukan proses A
- }
Secara default, penggunaan fungsi session_regenerate_id() tidak serta merta akan menghapus session sebelumnya secara otomatis. Agar session_regenerate_id() menghapus/menghancurkan session sebelumnya, Anda perlu menambahkan parameter boolean true pada fungsi tersebut. Sayangnya, parameter ini hanya bisa digunakan untuk PHP dengan versi 5.1.0 keatas.
Tidak ada komentar:
Posting Komentar