Maybe one of you already know a lot of attacks on
application technique called "SQL Injection". SQL Injection, or in the
Indonesian language, means: Injections SQL (Structure Query Language), has
a lot of casualties. Because by knowing this attack technique, you can
fool the application database. Therefore, for those who are new to this
attack technique, it's good to listen to what follows.
Materi ini saya kembangkan dari materi
masinosnaga, dimana program untuk mengantisipasi SQL injection telah saya
modifikasi sehingga lebih kebal terhadap serangan SQL injection. Apa trick nya
ikuti di tutorial ini. Untuk lebih jelas BACA dulu Materi dari Masinosinaga
Materi asli dari Masinosinaga baca dibawah
ini:
Mungkin di antara Anda sudah banyak yang
mengenal teknik serangan terhadap aplikasi yang dinamakan "SQL Injection". SQL
Injection atau dalam bahasa Indonesia, artinya: Suntikan SQL (Structure Query
Language), telah banyak memakan korban. Karena dengan mengetahui teknik
serangan ini, Anda sudah bisa mengelabui aplikasi database. Untuk itu, bagi
Anda yang baru mengenal teknik serangan ini, ada baiknya untuk menyimak ulasan
berikut.
Untuk mengetahui secara mudah tentang
dampak dari serangan ini, kita mengambil contoh pada proses "LOGIN". Proses
"LOGIN" adalah proses yang paling vital dalam setiap aplikasi yang ada. Karena
dengan adanya proses ini, masing-masing user dapat ditentukan haknya dalam
mengakses suatu aplikasi. Contohnya pada aplikasi-aplikasi perkantoran, proses
"LOGIN" sangat berguna untuk menentukan jabatan dan pekerjaan apa yang harus
dilakukan seorang karyawan dalam aplikasi yang dibuat.
Dari pada kita membayang-bayangkan, lebih
baik kita praktek langsung agar lebih mudah dicerna. Di sini kita bersama-sama
membuat contoh aplikasi Visual Basic dengan Database Access. Untuk itu buatlah
desain form seperti yang tampak pada gambar dibawah ini.
Biarkan Property Name pada masing-masing
control apa adanya. Selanjutnya kita desain sebuah database sederhana. Buatlah
database Microsoft Access dengan nama tabel "login" yang berisi kolom (field)
"user" dan "password", lalu namakan databasenya "pegawai.mdb". Isikan dengan
beberapa record.
Setelah semuanya selesai, pindah ke apliasi Visual Basic 6, tulislah code
berikut pada Form1.
Code::
Private Sub Command1_Click()
Data1.RecordSource = "SELECT * FROM LOGIN WHERE USER='" & Text1.Text & _
"' AND PASSWORD='" & Text2.Text & "'"
Data1.Refresh
If Data1.Recordset.RecordCount > 0 Then
MsgBox "Login Berhasil!"
Else
MsgBox "Login Salah!"
End If
End Sub
Private Sub Form_Load()
Data1.RecordSource = "SELECT * FROM LOGIN"
Data1.Refresh
End Sub
Sekarang, cobalah program tersebut.
Lakukan pengujian dengan memasukkan user dan password yang salah. Jika Anda
menemukan pesan "Login Salah!" maka proses berjalan dengan normal. Namun biar
lebih memastikan bahwa program berjalan baik, coba juga dengan memasukkan user
dan password yang benar. Jika Anda tidak salah memasukkan user dan password,
maka pesan yang keluar adalah "Login Berhasil!". Artinya sampai saat ini
pengujian program berjalan dengan baik. Terus apa lagi yang dipikirkan? Inilah
suatu kecerobohan yang terkadang sering muncul dalam aplikasi yang dibuat para
programmer. Para programmer sering lupa akan sisi keamanan aplikasi yang dibuat.
Untuk melihat dampak dari serangan ini. Jalankan kembali aplikasi
yang kita buat, dan anggaplah Anda sebagai orang lain yang tidak mengetahui
password untuk mengakses aplikasi tersebut. Namun dengan sedikit SQL Injection
anda dapat memasuki ruang login hanya dengan memasukkan teks berikut "hack' or
'1'='1" (tanpa tanda kutip) pada textbox input user dan/atau password. Maka Anda
tidak akan melihat pesan "Login Salah!" melainkan "Login Berhasil!".
Terus, bagaimana ini bisa terjadi? padahal kita tidak memasukkan password
sesungguhnya?
Ketika kita memasukkan user "meyer" dan password "tomero", maka query sql pada
code diatas akan menjadi :
Quote:
SELECT * FROM LOGIN WHERE USER='meyer' AND PASSWORD='tomero'"
Karena SQL menggunakan kriteria
berdasarkan user dan password tersebut, maka jika user dan password tidak cocok
dengan yang ada dalam tabel secara otomatis aplikasi memunculkan pesan "Login
Salah!". Tapi, jika kita memasukkan teknik SQL Injection pada query melalui
input pada aplikasi misalkan user dan password "hack' or '1'='1", apa yang
terjadi pada query sebenarnya?
Quote:
"SELECT * FROM LOGIN WHERE USER='hack' or '1'='1' " & _
AND PASSWORD='hack' or '1'='1'"
Kita dapat melihat, bahwa query SQL sudah
berubah menjadi query yang tidak menampilkan filter terhadap user dan password.
Itu dikarenakan pernyataan "OR 1=1" menyebabkan hasil execute query yang
menghasilkan nilai True. Mengapa True? Dalam logika matematika,
False Or True atau
True Or True menghasilkan nilai
True. Untuk hal ini saya tidak akan
membicarakan panjang lebar. Anda bisa membacanya dalam pelajaran logika
Matematika atau Pemrograman. Hasil pengembalian nilai True ini pada query tadi
mengakibatkan seluruh record akan ditampilkan, karena semua kriteria berlaku
pada semua record. Trik yang menyenangkan, bukan?
Dari percobaan yang sudah kita buat, kita dapat menggambarkan bagaimana cara
untuk menghindari serangan ini. Selanjutnya kita akan membuat contoh sederhana
prosedur untuk memfilter input yang dimasukkan oleh orang agar tidak bisa
dicurangi dengan SQL Injection.
Code::
Private Function FilterSQL(strInput As String) As String
strInput = Replace(strInput, "'", "''", 1, -1, 1)
strInput = Replace(strInput, "_xp", "", 1, -1, 1)
strInput = Replace(strInput, "--", "", 1, -1, 1)
strInput = Replace(strInput, ";", "", 1, -1, 1)
FilterSQL = strInput
End Function
Prosedur diatas akan mengubah semua karakter-karakter
yang berdampak pada teknik SQL Injection ini. Untuk itu tambahkan prosedur
tersebut dalam code sebelumnya dan gantilah query SQL untuk proses filter user
dan password seperti code berikut.
Code::
Data1.RecordSource = "SELECT * FROM SISWA WHERE NAMA='" & FilterSQL(Text1.Text) & _
"' AND ASAL='" & FilterSQL(Text2.Text) & "'"
Data1.Refresh
Akhir kata, sekian dulu tutorialnya untuk saat ini.
Namun seperti biasa, sebelum saya menutup pelajaran hari ini, saya mau
memberikan PR agar Anda dapat lebih memahami tutorial ini dengan baik dan lebih
berhati-hati lagi saat membuat modul Login di aplikasi Anda. Untuk itu, silahkan
Anda coba lakukan percobaan SQL Injection pada code yang belum di proteksi, agar
dapat melakukan manipulasi record seperti "UPDATE" atau "DELETE". Oke.
SCRIPT CODE LOGIN ANTI
SQL INJECTION oleh: ARIF JOHAR TAUFIQ
(CARA MENGATASI ANTI SQL
INJECTION) dibawah ini
Agar lebih kebal dari SQL
injection, scrip code untuk login dapat anda buat lebih spesifik yang mengquery
tabel login/user. Isian text oleh user jika dieksekusi tidak mengakibatkan SQL
injection, karena proses validasi ada pada pencocokan isi tabel login/user.
Berdasar kriteria filter tersebut kemudian cocokan recorset field USER dan
PASSWORD nya. Jika cocok maka proses login dapat Anda terusan
ke aplikasi berikutnya, jika tidak maka keluar.
Databse yg digunakan PBL.MDB berisi Tabel PUser dgn field UserName(text
20), Password(text 20).
Buatlag form spt diatas dan code program sbb:
Option Explicit
Dim cnPBL As ADODB.Connection
Dim rsPuser As ADODB.Recordset
----------------
Private Sub cmdExit_Click()
End
End Sub
---------------------------
Private Sub cmdOK_Click()
On Error GoTo PP
Dim coba As Integer
Dim Uname As String
Dim Pwd As String
Dim SQL As String
SQL = "SELECT * FROM PUSER WHERE UserName=" & "'" & Uname & "' AND Password=" &
"'" & Pwd & "'"
rsPuser.Open SQL, cnPBL, adOpenKeyset, adLockOptimistic
If Not (txtPuser.Text = rsPuser!UserName And txtPassword.Text = rsPuser!Password)
Then
txtPuser.Text = ""
txtPassword.Text = ""
txtPuser.SetFocus
MsgBox "USER NAME ATAU PASSWORD SALAH", vbCritical, "INFO"
Exit Sub
End If
If txtPuser.Text = "" Or txtPassword.Text = "" Then
txtPuser.SetFocus
Exit Sub
End If
frmLogin.Hide
frmBarang.Show ' jika benar buka form aplikasi
PP:
Select Case Err.Number
Case 3705
rsPuser.Close
Resume
End Select
End Sub
-----------------------------
Private Sub Form_Load()
Set cnPBL = New ADODB.Connection
Set rsPuser = New ADODB.Recordset
cnPBL.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\PBL.mdb;Persist
Security Info=False"
rsPuser.Open "SELECT * FROM Puser", cnPBL, adOpenKeyset, adLockOptimistic
End Sub
----------------------------------------------------
Private Sub txtPassword_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
cmdOK.SetFocus
End If
End Sub
--------------------------------------------------
Private Sub txtPuser_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
txtPassword.SetFocus
End If
End Sub
Copyright (C) anekawarna.890m.com 2007
For problems or questions regarding this web contact
[admin]
Last updated:
Friday October 23, 2009 16:25:29.