|
[104].
Menanggulangi SQL Injection
------------------------------------------------------
Author : SPYRO KiD
Contact : spyro_zone@Yahoo.COM
==> www.spyrozone.tk
CopyLEFT (c) 2005
www.spyrozone.tk All Rights Reserved
� 20/10/2005 21:50:21 WIB
------------------------------------------------------
//--- PREFACE ---//
Dari artikel sebelumnya
anda mungkin sudah mengerti tentang apa itu SQL Injection dan bagaimana cara
melakukannya. Okay, Spyro akan memberikan beberapa tips untuk mencegah SQL
Injection.
//------- PEMBAHASAN ------//
-
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.
-
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
-
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.
//----- Penutup -----//
Any question? Send mail to
Spyro_Zone@Yahoo.com
//------- Referensi
[1] http://www.4guysfromrolla.com/webtech/061902-1.shtml
Regards,
Spyro KiD
www.spyrozone.tk
/* ------------------------------|EOF|------------------------------ */
|