Pusat Belajar Komputer

Pusat Belajar Komputer
Lembaga Kursus dan Pelatihan di kota Metro Lampung

Mencegah sql injection



BAB17
Mencegah SQL Injection


        Tidak afdol rasanya apabila buku ini tidak saya lengkapi dengan cara bagaimana mengamankan sebuah situs web dari aksi SQL Injection ini. Berikut ini beberapa trik yang perlu anda ketahui untuk mencegah aksi SQL Injection pada situs web Anda . jika pun tidak bisa mengamankan situs web sepenuhnya. Setidaknya akan memperlambat seseorang untuk melakukan aksi tersebut.
            Dari berbagai kasus SQL Injection yang telah dijelaskan dalam buku ini, dapat kita tarik kesimpulan, SQL Injection dapat tejadi karena tidak adanya penanganan terhadap karakter-karakter tanda petik satu dan juga karakter double minus yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL. Sehingga seseorang bisa menyisipkanperintah SQL ke dalam suatu parameter maupun suatu form.
            Dari penjelasan di atas, kita dapat mengambil tindakan pencegahan supaya situs web kita tidakmenjadi korban serangan SQL Intection.
1.      Batasi panjang input box (jika memungkinkan), dengan cara membatasinya dikode program. Sehingga orang yang tidak berhak akan bingung sejenak melihat input box-nya tidak bisa di-inject dengan perintah yang panjang

2.      Administrator web haruslah tegas menolak user yang menginput karakter selain abjad dan angka. Karakter khusus dilarang masuk. Terapkan hal ini, baik input user, parameter URL, dan nilai-nilai dari cookies.

3.      Untuk nilai numeric,konversilah menjdi integer, sebelum di parsing menjadi statement SQL.  Atau gunakan ISNUMERIC untuk memastikan data tersebut interger.

4.      Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation), dan karakter khusus lainnya.

5.      Jika memungkinkan ,buatlah  daftar karakter yang boleh digunakan (whitelist).

6.      Batasi karakter  yang boleh diinput oleh pengunjung situs web Anda

7.      Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan.

8.      Matikan fasiltas-fasilitas standar, seperti Stored procedures,Extended Stored Procedures jika memungkinkan.

9.      Ubah “Startup and run SQL Server” menggunakan low privilege user.

10.   Mengganti Error message (Pesan Error) karena hal ini sering kali digunakan oleh orang yang tidak berhak untuk menelusuri informasi jalur penyimpanan  database.

11.   Batasi Permisi hanya pada user yang terotorasi saja. Sang user tentu saja harus yakin bahwa data yang dia terima sudah akurat dan tidak ceroboh memodifikasinya.

12.  Kalau bisa, hilangkan show error mysql pada konfigurasi PHP.

13.  Jangan percaya bahwa ada 100% system kita aman, selalu lakukan update secara berkala.

14.  Bagi Anda yang menggunakan CMS, sangat disarankan untuk sering-sering meng-update CMS.

15.  Sering-seringlah untuk memeriksa apakah terdapat bug pada situs web yang Anda kelola. Cara yang paling mudah adalah menggunakan tool SQL Injection yang telah dibahas pada bab sebelumnya. Karena Anda bisa menemukan sendiri kelemahan pada situs web Anda, sebelumnya ditemukan oleh orang lain Supaya dari poin-poin diatas tidak terasa hanya teori,berikut saya berikan beberapa penjelasan detail untuk mencegah serangan SQL injection.

K O N F I G U R A S I

Dalam PHP Anda dapat melakukan hal ini menggunakan perintah using error_reporting(0); pada setiap kode atau dalam file konfigurasi php.ini.

Berikut beberapa konfigurasi PHP lainnya yang bisa anda terapkan apabila Anda merasa tidak memerlukan konfigurasi tersebut.

·         Register_globals (Atur menjadi off)
·         Allow_url_fopen (Atur menjadi off)
·         Magic_quotes_gpc (Atur menjadi off)
·         Magic_quotes_runtime(Atur menjadi off)
·         Safe_mode and open_basedir(Secara default dalam kondisi disanled, namun dapat diaktifkan ‘enable’ lalu melakukan konfigurasi yang sesuai dengan keamanan yang Anda perlukan. Namun Anda perlu berhati hati mengonfirgurasi fungsi ini.)

Anda juga dapat menggunakan beberapa fungsi pada PHP untuk memblok fungsi validasi input.

·         Is_<type>(input) Periksa jenis input berdasarkan type-nya apakah string atau numerik. Contohnya,is_numeric().
·         Strlen(input) Periksa panjang karakter input.
·         Preg-match(regex, matchstring) Cocokan parameter umum dengan matchstring menggunakan parameter regex.
Contoh penggunaan preg_matc untuk memvalidasi parameter adalah:
Susername = $_POST[‘username’];                                                                                                        if {!preg_match(“/^[a-zA-Z] {8,12} $/D”,$username) {// handle failed validation}

            S C R I P T      A S P     M E N C E G A  H     S Q L  I N J E C T I O N
            Berikut ini syantax bagi Anda yang mengunakan ASP untuk mencegah SQL injection dengan memeriksa setiap karakter inputan yang masuk kedalam database malalui statement SQL. Misalnya pada kasus berikut kita harus mencegah karakter ‘(single quote) untuk diproses kedalam databases atau kita bisa mengganti karakter ‘(single quote) yang masuk dengan” (double single quote). Adapun contoh script login_process.asp yang sudah dimodifikasi agar  mencegah SQL injection adalah sebagai beikut.

<% option explicit >%
<%
     Dim connstring,conn,recset
     Connstrig = “provider=SQLOLEDB.1; Password=rahasia; Persist
Security Info=True; User ID=Sa; Intital Catalog= sqlinject; Data
Source=localhost”
    Set conn = server.createobject( “adodb.connection”)
    Set recset = server.createobject( “adodb.recordset”)
     Conn.open connstring
     Recet.open “select * from tbUser where username = ‘ “ &
Replace (request.from(“username”), ” ‘ “ , ” ‘ ‘ “) & “ ‘ and password =
‘ “ & replace(request.from(“password”) , “ ‘ “ ,” ‘ ‘ “ & “ ‘ “ ,conn,3 , 2
     If not recset.eof then
        Response.write recset.recordcount
        Session (“username”) = reques.from (“username”)
        Response.redirect “secured_page.asp”
Else
      Responseredirect “login.asp”
End if
%>
Dari kode diperhatikan pada inputan username dan password,terdapat sedikit modifikasi dengan mengganti dari request.from(“username)
Replace(request.from(“username”) , “ ‘ “ , “ ‘ ‘ “), demikian juga untuk yang bagian password.


K A R A K T  E R E N K O D E                   
Sebagai tambahan, PHP juga menyediakan fungsi mysql_real_escape(), yang berfungsi untuk megubah tanda kutip single quote (‘) menjadi backslash (\) secara otomatis.
Jika Anda perhatikan dalam bab terdahulu terlihat bahwa pemakaian karakter enkode adalah satu usaha untuk meingkatkan keamanan situs web dari serngan SQL Intection ,Anda tetap dapat menggunakan hal tersebut. Selain itu, Anda juga bisa menggunakan beberapa bentuk enkode lainnya. Misalnya, untuk membuat enkode dari karakter kutip tunggal (single quote), Anda bisa mencoba beberapa alternative berikut.

Representasi
Jenis Enkode
%27
%2527
%317
%u0027
%u02b9
%ca%b9
&apos;
&#39;
&#x27;
%26apos;
URL enconding
Double URL enconding
Nested double URL enconding
Unicode representation
Unicode representation
Unicode representation
HTML entity
Decimal HTML entity
Hexadecimal HTML entity
Mixed URL/HTML enconding
                     
Namun , Anda perlu berhati-hati dalam mengubah pemakaian kode setting karena terkadang karakter-karakter tertentu juga diperlukan untuk mengeksekusi perintah SQL yang Anda gunakan.





By: Efvy Zam
Penerbit : PT Elex Media Komputindo
Karya : KOMPAS GRAMEDIA
Penulis : RIZKI MELAWATI
Judul buku :SQL INJECTION
Previous
Next Post »

LikeNation

Social Media Exchange Website - Likenation