Author Topic: Penanganan SQL Injection Attacks  (Read 5207 times)

0 Members and 1 Guest are viewing this topic.

Offline 1nf0rm4t1c5

  • Administrator
  • *
  • Posts: 1150
  • Reputasi: 15
  • Informatics Developer
    • Forum Informatika
  • Lokasi: Indonesia
  • Jenis Kelamin: Laki-laki
Penanganan SQL Injection Attacks
« on: 12 April 2008, 11:33:58 »
Pemrosesan query yang dilewatkan ke database MySQL oleh PHP ditulis dengan menggunakan bahasa pemrograman SQL yang cukup handal, namun di sisi lain jika tidak hati-hati dapat membuka peluang buat orang lain dalam melakukan serangan SQL Injection, yaitu dengan memasukkan parameter2 tertentu dalam query di web Anda. Dengan memasukkan potongan-potongan kode tertentu yang jahat dalam parameter2 form, seseorang dapat menyusup atau bahkan merusak data dalam server.

Misal Anda mempunyai sebuah parameter dalam form secera sederhana Anda tulis dalam variabel dengan nama $produk, dan Anda membuat SQL seperti berikut:

Quote
$sql "select * from tabelProduk where produk = '$produk' ";

Jika parameter tersebut datang secara langsung dari suatu form, gunakan database-specific escapes (semacam fungsi penanganan dalam database) dengan menggunakan fungsi2 yang tersedia dalam PHP, misal:

Quote
$sql = 'Select * from tabelProduk where produk= ' " '
       mysql_real_escape_string($produk) . ' " ';

Jika tidak, seseorang dapat meletakkan potongan2 kode berikut dalam parameter form:

Quote
39'; DROP tabelProduk; SELECT 'FOO

Maka hasil dari $sql adalah:

Quote
select from tabelProduk where produk '39'DROP tabelProdukSELECT 'FOO'

Dikarenakan tanda semicolon (titik koma) merupakan pembatas dalam pernyataan MySQL, database akan memproses tiga pernyataan:

Quote
select from tabelProduk where produk '39'
DROP tabelProduk 
SELECT 
'FOO'

Nah, itulah hasil tabel Anda.

Perhatikan bahwa sintaks ini biasanya tidak dapat berjalan dengan PHP dan MySQL, dikarenakan fungsi mysql_query() hanya mengijinkan satu pernyataan untuk diproses per request. Namun bagaimanapun, sbuah subquery masih bisa bekerja.

Untuk mencegah serangan SQL injection, lakukan dua hal berikut:

  • Selalu memvalidasi semua parameter. Misal, jika suatu parameter membutuhkan sebuah angka, maka pastikan bahwa parameter tersebut memang benar2 sebuah angka.
  • Selalu gunakan fungsi mysql_real_escape_string() pada data untuk menangani adanya quote (tanda petik tunggal) ataupun double quote (tanda petik ganda) dalam data Anda

Catatan: Untuk secara otomatis menangani berbagai macam bentuk data, Anda dapat mengaktifkan Magic Quotes

Beberapa kerusakan pada MySQL dapat dihindari dengan memperketat hak akses user dalam MySQL. Akun2 user MySQL dapat dibatasi hanya melakukan query tertentu pada tabel2 tertentu. Misal, Anda dapat membuat pengguna (user) MySQL dimana hanya bisa melihat atau menyeleksi baris2 dalam tabel saja tanpa bisa melakukan query lain. Namun bagaimanapun, hal ini tidak terlalu berguna untuk diterapkan pada data dinamis, dan lagipula, jika Anda mempunyaidata anggota yang sensitif, hal itu memungkinkan seseorang untuk mengakses data tertentu dimana Anda tidak ingin membuatnya terlihat. Misal, seorang user mengakses data akun yang dapat menyebabkan adanya injeksi beberapa kode yang dapat mengakses data akun orang lain, bukannya mengakses data pribadinya sendiri, berdasrkan session yang diberikan untuknya.

Forum Informatika

Penanganan SQL Injection Attacks
« on: 12 April 2008, 11:33:58 »
Sponsored Links:


Offline cyclon

  • Global Moderator
  • *
  • Posts: 186
  • Reputasi: 31
    • Indonesian Informatics Online Community
  • Jenis Kelamin: Laki-laki
Re: Penanganan SQL Injection Attacks
« Reply #1 on: 12 April 2008, 12:12:04 »
Tambahan

Untuk mengaktifkan Magic Quotes, matikan dulu servernya, kemudian buka file php.ini
Setelah itu set magic_quotes_gpc = 1

 :educated:

Offline drzfruit

  • Bibit IF
  • *
  • Posts: 20
  • Reputasi: 0
  • Lokasi: bandung
  • Jenis Kelamin: Laki-laki
Re: Penanganan SQL Injection Attacks
« Reply #2 on: 07 March 2011, 17:33:55 »
magic quotes GPC