Berikut ini beberapa contoh teknik SQL injection,implementasi,dan cara menggagalkan nya. Single SQL Injection walaupun penyerang awalnya mencoba memasukan query berupa pernyataan SQL,akan tetapi bukan sembarang query. Dalam hal ini,penyerang cukup memiliki pengatahuan mengenai SQL,sebagai
contoh permulaan (maklumlah saya masih newbie anda memiliki kode seperti ini.
Code: |
$match = false;
if (isset($_POST['submit'])) { $nama = $_POST['nama']; $pass = $_POST['pass']; $sql = “SELECT nama, password FROM user WHERE nama=’$nama’ AND password=’$pass’”; $res = mysqli_query($db, $sql); // jika res berhasil,dan row yang // dikembalikan=1, set $match=true if ($res && mysqli_query_rows($res) == 1) { $match = true ; mysqli_free_result($res); } if ($match === true) { echo ‘account match’; } else { echo ‘invalid account’; } } |
kode program diatas memang kelihatan melakukan verifikasi data, tetapi sebenarnya sangat
rapuh,penyerang bisa menggnakan query-query seperti dibawah ini,untuk melakukan akses
secara tidak sah
Code: |
// mengisi field nama saja,# adalah komentar,
// yang akan mengabaikan baris setelahnya admin’# |
Code: |
// mengisi nama field saja // mengekstrak data kelokasi tertentu ‘OR’ 1=1 INTO DUMPFILE ‘/path/ke_lokasi/file.txt ‘# ‘OR’ 1=1 INTO OUTFILE ‘/path/ke_lokasi/file.txt ‘# |
Bagaimapun juga,contoh contoh SQL injection diatas adalah contoh yang umum. Adapun untuk
mencegah nya menggunakan fungsi mysql_real_escape_string () atau addslashes(),
Code: |
$nama = myMacig($_POST['nama']};
$pass = myMacig($_POST['pass']}; |
Multiple SQL injection
Contoh SQL injection lainnya adalah dengan memberikan multiple query,seperti berikut:
Code: |
// $id dari method GET/POST
$sql = “SELECT * FROM buku WHERE kode=’{$id}’ “; //mengahapus isi table 0; DELETE FROM user // membuat account baru 0; GRANT ALL ON *.* TO ‘xxx@%’ |
Dalam kasus ini,macig quote akan mengabaikan tanda titik koma,ini sangat membahayakan
jika menggunakan SQLite atau postgreSQL. Adapun solusi nya adalah menggunakan operator
casting untuk memastikan bahwa id harus integer.
Code: |
//Simulasi nilai $_POST['id']
0; DELETE FROM user $id = (int) myMacig($_POST['id']); |
apabila anda ingin memeriksa apakah input mengandung karakter tertentu,gunakan fungsi strpos().
Code: |
$nama = myMacig ($_POST ['id']);
// periksa apakah karakter ; terdapat // di variabel $nama. if (strpos($nama, ‘;’ die (‘Naughty Naughty, Very Naughty…’); |
Sumber : http://www.black-c0de.org/t781-pacth-untuk-sql-injection
Tidak ada komentar:
Posting Komentar
Diharapkan dapat memberikan komentar yang membangun
Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.