Langsung ke konten utama

Code Login Anti SQL Injection

Bismillah sebelum mulai libur idul fitri ane post artikel dulu... ane dapaet dari pencarian ane di internet... check it out kita mulai pembahasannya

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.


Untuk Mengatasi SQL Injection Buatlah Script Code Login Seperti Berikut 

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. 




Database 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

Uname = Trim(txtPuser.Text)
Pwd = Trim(txtPassword.Text)

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

Selamat mencoba semoga bisa bermanfaat .... try and error itu kunci pembelajaran komputer
Sumber :  http://guru.technosains.com 

Komentar

Postingan populer dari blog ini

Mengenal Karakteristik Dan Siklus Hidup worm , virus, trojan horse, ataupun malcode lainnya

pada umumnya worm memiliki kemampuan dasar sebagai berikut : 1.        KEMAMPUAN REPRODUKSI DAN DISTRIBUSI Yaitu kemampuan yang mutlak dimiliki oleh worm untuk membuat salinan dirinya sendiri, sekaligus mendistribusikan salinan tersebut pada system yang lain baik   melalui media penyimpanan   seperti flasdisk, disket dll, maupun melalui jaringan komputer, walau pun memiliki rutin untuk menginfeksi program lain namun tidak bertujuan menjadikan file program terinfeksi sebagi file infektor. Pada awalnya wor dibuat dengan aksi memnuhi hardisk dan jaringan, namun seiringnya perkembangan jaman   dan teknologi informasi hal ini di tinggalkan oleh para worm writter   karena malah akan mengurangi kemampuan worm itu sendiri dalam menyembunyikan dirinya sendiri, yang akan berakibat worm tersebut cepat terendus oleh advance user ataupun oleh para vendor pembuat anti virus. 1.        KEMAMPUAN REKAYASA SOSIAL Karena file infektor akan aktif saat user meng esekusi maka social engenering at

Contoh Rewrite Rule

melanjutkan post yang sebelumnya mengenai penyerderhanaan  link di website Sedikit aja Nih Gan Silakan di simak... RewriteEngine on RewriteRule ^home$ media.php?module=home [L] RewriteRule ^galeri-(.*)\.html$ zoom.php?id=$1 [L] RewriteRule ^album-(.*)\.html$ media.php?module=detailalbum&id=$1 [L] RewriteRule ^berita-(.*)\.html$ media.php?module=detailberita&id=$1 [L] RewriteRule ^agenda-(.*)\.html$ media.php?module=detailagenda&id=$1 [L] RewriteRule ^hasil-pencarian\.html$ media.php?module=hasilcari&id=$1 [L] RewriteRule ^indeks-berita\.html$ media.php?module=indeksberita&id=$1 [L] RewriteRule ^hasil-poling\.html$ media.php?module=hasilpoling&id=$1 [L] RewriteRule ^lihat-poling\.html$ media.php?module=lihatpoling&id=$1 [L] RewriteRule ^profil-kami\.html$ media.php?module=profilkami&id=$1 [L] RewriteRule ^tentang\.html$ media.php?module=tentang&id=$28 [L] RewriteRule ^hubungi-kami\.html$ media.php?module=hubungikami&id=$1 [L] Rewri

Sekilas tentang ACL form Windows 7 untuk kebutuhan Audit Berbasis Komputer

ACL for Windows dirancang khusus untuk menganalisa data dan menghasilkan laporan audit untuk user non-teknis sampai expert users. Dengan menggunakan ACL, pekerjaan auditing akan jauh lebih cepat dibandingkan proses auditing manual yang memerlukan waktu sampai berjam-jam bahkan sampai berhari-hari. Dengan beberapa kemampuan ACL, analisis data akan lebih efisien dan lebih meyakinkan. Berikut ini beberapa kemampuan ACL : 1.       Mudah dalam penggunaan . ACL for Windows, sesuai dengan namanya adalah software berbasis windows, dimana sistem operasi windows telah dikenal User Friendly (mudah digunakan). Kemudahan ini ditunjukkan dengan user hanya melakukan click pada gambar-gambar tertentu (icon) untuk melakukan suatu pekerjaan, dan didukung pula dengan fasilitas Wizard untuk mendefinisikan data yang akan dianalisis. 2.       Built-in audit dan analisis data secara fungsional . ACL for Windows didukung dengan kemampuan analisis untuk keperluan audit/pemeriksaan seperti : Analisis Statisti