Pages

Thursday, 8 January 2015

Cara Menanggulangi SQL Injection



1.  Lindungi Query SQL
Untuk melindungi query SQL, kita harus menerapkan tehnik sanitasi/mengosongkan seluruh input yang diterima dari request object ASP seperti: Request, Request.QueryString, Request.Form, Request.Cookies dan Request.ServerVariabbles. Teknik sanitasi ini sangat tergantung pada Relational Database Management System.

RDBMS merupakan sistem yang multiuser. Oleh karena itu, RDBMS menyertakan fitur sekuriti untuk mengontrol akses ke/dan penggunaan database. Tujuan arsitektur sekuriti RDBMS adalah untuk melindungi dan memverifikasi semua bagian informasi yang tersimpan dalam database. Informasi bisnis perlu diverifikasi untuk memastikan bahwa tidak ada data yang berubah.

Contoh penanganan MS SQL Server seperti dibawah ini.
Dalam sebuah halaman login, script semestinya terdiri dari dua variabel (txtUserName, txtPassword) dari jenis string yang dilewati. Saat sebuah tanda petik tunggal (') dimasukkan dalam sebuah parameter, hal ini mengijinkan user untuk memanipulasi perintah yang dieksekusi. Untuk menghadapi ancaman SQL Injection, hindari penggunaan tanda petik tunggal (') dengan menggunakan fungsi REPLACE, seperti dibawah ini:

p_strUsername = Replace(Request.Form("txtUsername"), "'", "''")
p_strPassword = Replace(Request.Form("txtPassword"), "'", "''")

Contoh yang kedua, script diharapkan adalah sebuah variabel (ID) jenis long integer. Perintah SQL yang tidak diotorisasi dapat mengeksekusi dengan menambahkan perintah SQL ke dalam parameter ID. Untuk mengatasi hal ini gunakan input untuk Long Integer dengan fungsi CLng sbb:

p_lngID = CLng(Request("ID"))
Jika user mencoba melewati suatu string, fungsi CLng akan menampilkan pesan error.
     
2.  Mengganti Error message (Pesan Error)
Yang kedua adalah mengganti pesan error message karena hal ini seringkali digunakan oleh sang attacker untuk menelusuri informasi jalur penyimpanan database. Contoh codenya:
Sub LogError(strLocation)
Dim objFSO 'sebagai Scripting.FileSystemObject
Dim objStream 'sebagai Scripting.TextStream
if Err.Number = 0 Then Exit Sub
WriteLine "<p><font color=#FF0000><b>"_
& "ERROR."_
& "Please try again later or contact webmaster.</b></font></p>"
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objStream = objFSO.OpenTextFile("C:\errorlog.txt",_
ForAppending, True)
ObjStream.WriteLine Now() & ": [" & Request("SCRIPT_NAME")_
& " - Err #" & Err.Number & "]" _
& Err.description & "[Lokasi: " & strLocation & "]"
ObjStream.Close
Set objStream = Nothing
Set objFSO = Nothing
Response.End
End Sub
 
3.  Batasi Permisi
batasi permisi hanya pada user yang terotorisasi saja. Sang user tentu saja harus yakin bahwa data yang dia terima sudah akurat dan tidak ceroboh memodifikasinya.

Regards’

./51N1CH1

No comments:

Post a Comment