• About
  • Contact
  • My Twitter
  • My Facebook

Learning To Earning

Belajar Untuk Mendapatkan...

  • HOME
  • ALGORITMA
  • PHP
  • JAVA
  • CCNA 4
  • Hardware
  • NGE-BLOG
Home » PHP » PHP Dasar – SQL Injection

PHP Dasar – SQL Injection

Add Comment
PHP

Apa itu SQL Injection
SQL injection merupakan perbuatan orang yang memberikan perintah SQL untuk dijalankan di mesin server SQL tanpa sepengetahuan Anda sebagai administrator. Proses injection biasanya dilakukan orang ketika memasukkan input melalui form dengan perintah atau kode tertentu. Berikut ini adalah contohnya:
<?
$nama = "agus";
$query = "SELECT * FROM customers WHERE username = '$name'";
echo "Query Normal: " . $query . "<br>";
// input user yang menggunakan SQL injection
$name = "' OR 1 OR '1' = '1";
$query = "SELECT * FROM customers WHERE username = '$name'";
echo "Query Injection: " . $query;
?>

Tampilan script di atas adalah:
Query Normal: SELECT * FROM customers WHERE username = 'agus'
Query Injection: SELECT * FROM customers WHERE username = '' OR 1' OR '1' = '1'

Apabila query normal dijalankan di server SQL tentu saja tidak ada masalah karena akan mencari record dari tabel customers yang terkait dengan username agus. Query tersebut akan mendapatkan data yang diinginkan apabila memang terdapat user agus dan tidak akan mendapatkan data yang diinginkan apabila tidak terdapat user tersebut.
Sedangkan untuk query injection pasti akan selalu mendapatkan paling sedikit satu record/ data dari tabel customers. Mengapa hal ini bisa terjadi? Hal ini dikarenakan dalam query injection terdapat perintah OR 1 yang selalu bernilai TRUE.
Berikut ini adalah contoh mekanisme SQL injection yang dapat terjadi pada proses login. Misalkan terdapat tabel user yang digunakan untuk menyimpan data user, yang di dalamnya terdapat 2 field yaitu username dan password. Misalkan juga terdapat 2 user yaitu JOKO (password : JOKO) dan AMIR (password : AMIR).
Diberikan form login sbb:
Login.php
<form method=post action=submit.php>
Nama user <input type=text name=username><br>
Password <input type=text name=password>
<input type=submit name=submit value=Submit>
</form>

Dan file submit.php sbb:
<?
mysql_connect("localhost","root","root");
mysql_select_db("test");
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM user WHERE username = '$username' AND password = '$password'";
echo "$query<br>";
$hasil = mysql_query($query);
$jmldata = mysql_num_rows($hasil);
if ($jmldata != 0) echo "<h1>Login SUKSES</h1>";
else echo "<h1>Login GAGAL</h1>";
?>

Ide dari proses login di atas adalah mencari namauser dan password dalam tabel user berdasarkan username dan password yang dimasukkan melalui form. Perintah mysql_num_rows() akan menghasilkan jumlah record hasil pencarian. Apabila ditemukan namauser dan password yang sesuai maka mysql_num_rows() akan menghasilkan jumlah baris record yang tidak sama dengan 0. Sedangkan apabila tidak ditemukan, jumlah baris record adalah 0. Selanjutnya jumlah baris record yang muncul tersebut dicek. Login akan berhasil apabila ada record yang ditemukan atau jumlah baris recordnya tidak sama dengan 0, dan akan gagal jika jumlah baris recordnya 0.
Sekarang, perhatikan apa yang terjadi apabila dalam form dimasukkan input sebarang nama user dan password berbentuk ' OR 1 OR '1' = '1’. Pastilah login akan sukses karena perintah SQL yang dijalankan adalah:
SELECT * FROM user WHERE username = 'xxx' AND password = '' OR 1 OR '1' = '1'
yang akan menghasilkan TRUE.

Cara Pencegahan SQL Injection
Beruntunglah … sekarang PHP sudah dilengkapi dengan security (PHP rilis terbaru) dengan mengubah karakter single quote (‘) menjadi (\’). Dengan kata lain karakter single quote yang diinputkan melalui form secara otomatis akan diubah menjadi backslash-single quote (\’).
Sehingga untuk kasus login di atas perintah SQL yang dijalankan adalah:
SELECT * FROM user WHERE username = 'xxx' AND password = '\' OR 1 OR \'1\' = \'1'
Sehingga akan menghasilkan FALSE karena password yang dicari adalah \' OR 1 OR \'1\' = \'1. Dengan demikian login akan gagal.

Catatan:
Dalam MySQL, tanda single quote digunakan sebagai pengapit data/value yang berupa string. Sedangkan backslash-single quote merupakan tanda yang digunakan untuk menyatakan karakter single quote.
Apabila PHP Anda tidak mensupport metode tersebut (biasanya PHP rilis lama), cara lain adalah
menggunakan perintah mysql_real_escape_string(). Peran perintah ini sama dengan metode di atas yaitu mengubah single quote menjadi backslash-single quote.
Script berikut ini adalah modifikasi dari submit.php pada kasus login di atas yang ditambahkan
perintah mysql_real_escape_string();
<?
mysql_connect("localhost","root","root");
mysql_select_db("test");
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT * FROM user WHERE username = '$username' AND password = '$password'";
echo "$query<br>";
$hasil = mysql_query($query);
$jmldata = mysql_num_rows($hasil);
if ($jmldata != 0) echo "<h1>Login SUKSES</h1>";
else echo "<h1>Login GAGAL</h1>";

?>
Tweet
PHP Dasar – SQL Injection Title : PHP Dasar – SQL Injection
Description : Apa itu SQL Injection SQL injection merupakan perbuatan orang yang memberikan perintah SQL untuk dijalankan di mesin server SQL t...
Rating : 5

0 Response to "PHP Dasar – SQL Injection"

Anda sopan, saya segan.

← Newer Post Older Post → Home
Subscribe to: Post Comments (Atom)

Popular Posts

  • PHP Dasar – Operasi File
    Bagaimana menggunakan perintah PHP untuk melakukan operasi file mulai dari proses membuka dan menutup file. Setelah itu dilanjutka...
  • Model Hirarki Jaringan & Cisco Enterprise Architecture
    Model Hirarki Jaringan Desain Jaringan Hirarki membagi jaringan menjadi beberapa lapisan. Yang menyerupai bentuk pohon. Setiap Lapisan me...
  • Pengertian Point to Point Protocol (PPP) dan Contoh Penerapannya
    Pengertian PPP (Point to Point Protocol) Network   -   Point-to-Point Protocol   (sering disingkat menjadi PPP) adalah sebuah proto...
  • ALGORITMA & PEMROGRAMAN JAVA - Penjumlahan Dua Bilangan Dengan JOptionPane
    Mendefinisikan masalah yang dilakukan mendapatkan kesimpulan bahwa ada 2 buah bilangan yang akan dimasukan ketika program...
  • Pola Fikir Hacker Dalam Mencari Celah Keamanan
    Berbagai macam jenis serangan yang dapat digunakan oleh hacker untuk menemukan celah keamanan di setiap targetnya. Namun sebelum menentuk...
  • Frame Relay Beserta Penerapannya Dalam Simulasi Jaringan
    Frame Relay beserta penerapannya dalam simulasi jaringan FRAME RELAY Frame Relay ialah teknologi   switching   yang memfasi...
  • TENTANG PHP
    PHP (Hypertext Preprocessor). Php adalah bahasa script yang dapat disisipkan ke dalam HTML (Hyper Text Markup Language), PHP lebih ba...
  • ALGORITMA & PEMROGRAMAN JAVA - Menjumlahkan Dua Buah Matriks
    Menjumlahkan Dua Buah Matriks: Narasi: Mulai Import peralatan java Scanner, untuk menginputkan perintah dari keyboard Deklarasikan A...
  • PHP Dasar – MySQL
    MySQL merupakan salah satu DBMS open source yang paling populer pada saat ini. Meskipun dahulu MySQL pernah dikritisi karena tidak me...
  • ALGORITMA & PEMROGRAMAN - Teknik Penyajian Algoritma
    Dalam penyajian Algoritma ada beberapa alat bantu agar pembuatan Algoritma nya lebih mudah, yaitu: Simbol Intruksi Flowchart Pseud...

Labels

Algoritma (8) Blog (5) CCNA 4 (3) Hardware (3) Java (5) PHP (16)

Entri Populer

  • Pengertian Point to Point Protocol (PPP) dan Contoh Penerapannya
    Pengertian PPP (Point to Point Protocol) Network   -   Point-to-Point Protocol   (sering disingkat menjadi PPP) adalah sebuah proto...
  • Model Hirarki Jaringan & Cisco Enterprise Architecture
    Model Hirarki Jaringan Desain Jaringan Hirarki membagi jaringan menjadi beberapa lapisan. Yang menyerupai bentuk pohon. Setiap Lapisan me...
  • ALGORITMA & PEMROGRAMAN JAVA - Penjumlahan Dua Bilangan Dengan JOptionPane
    Mendefinisikan masalah yang dilakukan mendapatkan kesimpulan bahwa ada 2 buah bilangan yang akan dimasukan ketika program...

Tentang Saya

  • Bimbim
  • Unknown

Label Cloud

Algoritma Blog CCNA 4 Hardware Java PHP
Back to top!
Copyright 2013 Learning To Earning - All Rights Reserved Powered by Blogger