SQL Injection dan bagaimana cara mengatasi?


SQL injection is a code injection technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and thereby unexpectedly executedhttp://en.wikipedia.org

Sekilas tentang SQL Injection

Setelah banyaknya bug-bug yang bertebaran di internet dari unicode hingga yang baru-baru ini menggemparkan jagad maya yaitu RPC Dcom, sekarang muncul lagi satu lubang keamanan yang membahayakan sebuah websites. SQL Injection atau dikenal juga dengan SQL insertion adalah sebuah teknik yang digunakan untuk mengeksploitasi database pada suatu websites dengan memaksa keluarnya error page situs itu yang ada error pages itu terdapat info tentang struktur database website yang dieksploitasi. SQL sendiri merupakan bahasa pemrograman database yang sering dipakai para web developer maupun admin sebuah situs untuk menampung ataupun menaruh data-data baru dari suatu input yang masuk seperti input member login, search engine, dan lain sebagainya. 

Sebenarnya SQL injection sendiri bukanlah hal baru, dari dulu teknik ini sudah dikenal dalam dunia hacking sebagai salah satu teknik web hacking, namun baru muncul lagi sekarang karena sifatnya yang dapat merusak database dari suatu situs. Teknik yang digunakan dalam SQL Injection adalah dengan jalan menginput perintah- perintah standar dalam SQL (DDL, DML, DCL) seperti CREATE, INSERT, UPDATE, DROP, ALTER, UNION, SELECT dan perintah-perintah lainnya yang tak asing lagi bagi anda yang sudah mengenal SQL secara mendalam maupun yang baru saja belajar. Dari berbagai jenis SQL dari MySQL, PostgreSQL, Nuke SQL, dan MS-SQL, yang paling rentan terhadap SQL Injection adalah MS-SQL.

SQL Injection adalah suatu teknik injeksi kode yang mengeksploitasi kerentanan keamanan yang terjadi pada lapisan database. Kelemahan ini muncul ketika pengguna lolos menembus keamanan dari database tersebut. Contohnya, pembobolan lewat input box dan memasukkannya lewat alamat URL. Selain itu  Teknik hacking SQL injection mulai mencuat kepermukaan semenjak dijebolnya situs KPU pada pemilu 2009 putaran pertama kemarin oleh Dani Firmansyah atau Xnuxer , dengan teknik ini beliau dapat masuk sebagai web administrator tanpa susah payah scan portport yang terbuka , tanpa terdeteksi oleh firewall dan tanpa tools ke situs tersebut yang konon systemnya seharga 152 milyar itu dengan keamanannya yang berlapis lapis.

Pengertian SQL Injection

  1. SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client.
  2. SQL Injection merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.

Sebab terjadinya SQL Injection

  1. Tidak adanya penanganan terhadap karakter – karakter tanda petik satu ’ dan juga karakter double minus — yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
  2. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.

Bug SQL Injection berbahaya ?

  1. Teknik ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account.
  2. Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database.
  3. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.

Cara mengatasi/melindungi database dari 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.

//——- Referensi


5 comments

  1. bang..
    kalo mau ngaganti halaman pas di kasih tanda ‘ dibelakang gimana?
    biar gk ada tulisan
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘\” at line 1

    tulisan yang itu mau diganti jadi..
    halaman html not found..

    misal..
    http://ferdhika.com/include/image.php?id=26
    pas diketik
    http://ferdhika.com/include/image.php?id=26
    muncul
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘\” at line 1

    nah kalo mau di ganti pake halaman html bisa gk?

    kaya forum http://forum.balikita.net/viewtopic.php?id=5616

    mohon pencerahannya 🙂

  2. Sering kali content atau koment2 masuk sembarangan pada web kita, itu termasuk inject sql bukan…? Cara mengatasinya bgmn? Trims sharingnya

  3. Thx atas infonya….
    Saya mo menanyakan sesuatu. Saya memiliki Server Database dengan SQL SERVER 2000 dan menggunakan OS Windows Server 2000. Server ini sudah berjalan lebih dari 2 tahun. Beberapa waktu yang lalu ketika client membuka data 2 bulan terakhir, data tidak muncul.sedangkan data yang lebih lama bisa dimunculkan/terbaca oleh server.Kira2 apa penyebabnya dan bagaimana cara mengatasinya? Mohon bantuannya, terimakasih…

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.