Jika Sang Khalik menghendaki, maka semua manusia akan memiliki warna kulit yang sama, agama yang hanya satu, tidak ada yang namanya negara, suku bangsa dan tidak ada perbedaan. Artinya Sang Khalik memang menghendaki adanya perbedaan. Perbedaan adalah hakekat penciptaan. Perbedaan itu indah.

Membuat Aplikasi PHP Yang Aman Bag. 2

Dikirim: September 2nd, 2006 | Oleh: Riyogarta | Kategori: PHP | 8 Komentar »

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.

PHP:
  1. function anti_sql_injection( $input ) {   
  2.     // daftarkan perintah-perintah SQL yang tidak boleh ada
  3.     // dalam query dimana SQL Injection mungkin dilakukan
  4.     $aforbidden = array (
  5.     "insert", "select", "update", "delete", "truncate",
  6.     "replace", "drop", " or ", ";", "#", "--", "=" );
  7.  
  8.     // lakukan cek, input tidak mengandung perintah yang tidak boleh
  9.     $breturn=true;   
  10.     foreach($aforbidden as $cforbidden) {
  11.         if(strripos($input, $cforbidden)) {
  12.             $breturn=false;
  13.             break;   
  14.         }   
  15.     }
  16.     return $breturn;
  17. }

Cara memanfaatkan fungsi tersebut adalah sebagai berikut (contoh pada proses login dimana SQL injection kerap dilakukan)

PHP:
  1. if(anti_sql_injection($_POST['user']) and
  2.    anti_sql_injection($_POST['password'])) {
  3.     // lakukan proses login
  4. } else {
  5.    die();
  6. }

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.

PHP:
  1. if($_SESSION['id_user']<>13) {
  2.    // Proses login (authentifikasi)
  3.    // Jika login sukses, jalankan perintah dibawah ini
  4.    $_SESSION['id_user']=13;
  5. } else {
  6.   if($_SESSION['id_user']==13) {
  7.       // lakukan proses A
  8. }

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:

PHP:
  1. if($_SESSION['id_user']<>13) {
  2.    // Proses login (authentifikasi)
  3.    // Jika login sukses, jalankan perintah dibawah ini
  4.    $_SESSION['id_user']=13;
  5. } else {
  6.   if($_SESSION['id_user']==13) {
  7.       // lakukan proses A
  8. }

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.

Related posts:

  1. Membuat Aplikasi PHP Yang Aman Bag. 1
  2. Panduan Belajar PHP
  3. 19 Aplikasi dan Tools Yang Saya Install di Ubuntu 9.10
  4. Aplikasi Yang Mudah Dibawa
  5. Delphi for PHP

8 komentar untuk “Membuat Aplikasi PHP Yang Aman Bag. 2”

  1. 1
    Catatan » Membuat Aplikasi PHP Yang Aman Bag. 1
    berkomentar pada jam 10:57 am
    tanggal 2 September 2006

    [...] Bersambung ke Membuat Aplikasi PHP Yang Aman Bag. 2 [...]

  2. 2
    Meda
    berkomentar pada jam 5:17 pm
    tanggal 11 September 2006

    Hi Riyo!

    Aku alumni BPI 1 angkatan 88, cuma suer, aku ngga ngeh kamu tuh yang mana .. hehehe. sorry. aku sempet liat website reuni, dah lewat ya? sayang banget … kalo kumpulan2 alumni BPI1 angkatan 88 ini ada websitenya ngga?

    thanks!

  3. 3
    nur
    berkomentar pada jam 4:21 pm
    tanggal 12 December 2006

    bagaikjkjjgf

  4. 4
    doez
    berkomentar pada jam 8:14 am
    tanggal 15 April 2008

    thank’s

  5. 5
    nix
    berkomentar pada jam 12:21 pm
    tanggal 10 December 2008

    tutorial yg bagus mas :)

  6. 6
    brewokkeren
    berkomentar pada jam 10:45 am
    tanggal 3 March 2009

    kalau bisa dikasih menu download mas untuk artikel yang bagus ini

  7. 7
    Tommy
    berkomentar pada jam 12:46 am
    tanggal 27 January 2010

    boleh di coba nih
    .-= Tommy´s last blog ..Pelayanan Terbaik Telkom Speedy ? =-.

  8. 8
    Muhamad Erros
    berkomentar pada jam 3:14 pm
    tanggal 19 February 2010

    Terima Kasih Atas tutorialnya sangat berguna. salam kenal


Isi Komentar