Perangkat Lunak Pendidikan Indonesia

Saturday, October 28, 2017

Cara Efektif Mencegah SQL Injection di PHP


esNesia- Diantara yang dilakukan hacker saat menyerang situs target adalah menggunakan teknik SQL Injection pada pemrograman PHP berikut ini adalah Cara Efektif Mencegah SQL Injection di PHP,

Yang paling banyak kena serangan adalah web php yang menyertakan tanda ? pada situs,
Contoh webtarget[.]com/artikel[.]php?id=1 
Hacker akan menyerang menginjeksi dengan menambah tanda-tanda tertentu yaitu tanda petik tunggal ('), -, ?or 1=1– , dan lain sebagainya, sehingga menjadi
webtarget[.]com/artikel[.]php?id=1'
penyerangan seperti ini sama halnya dengan penyerangan terhadap database

baca juga Cara mereka membobol situs dengn SQL Injection

Berikut ini adalah

Cara untuk menghindari SQL Injection tersebut di atasa :


#1. Jadikan variabel get menjadi absolute integer
Biasanya para hacker melakukan penetrasi terhadap variabel id yang kita letakkan pada url..
Contoh : pada url web-dia/berita[.]php?id=1
ketika akan membaca isi dari variabel id biasanya kita menggunakan syntak
id = $_GET['id'];
jadi setiap isi dari id pada url akan disimpan pada variable $id..

dan untuk query ke database :
"SELECT * FROM tbl_berita WHERE id='$id'"

melalui variabel $id ini lah para hacker menggunakan teknik SQL Injection, dengan menggunakan perintah-perintah SQL yang dapat mengeksploitasi atau masuk ke database..

 Solusinya:
Buatlah id menjadi absolute integer dengan cara merubah sintaks pembacaan variabel get id menjadi:
$id = abs((int)$_GET['id']);

fungsi abs() atau dalam ilmu matematika disebut absolut atau nilai asli adalah untuk menghilangkan tipe data minus dan int digunakan untuk mengubah tipe data menjadi integer (hanya mengijinkan tipe data integer). jadi ketika variabel id pada url di rubah secara manual dan diisi dengan sintak SQL yang berupa string maka tetap dibaca 0.

#2. Tambahkan variabel get berisi enkripsi md5 yang divariasikan pada url

Jika awal url adalah web-dia[.]com/berita[.]php?id=1

Maka kita cukup menambahkan variabel yg berisi enkripsi dari id yg dimodifikasi dengan string acak menjadi
web-dia[.]com/berita[.]php?id=1&token=5b0743e36khjfssdafe882a4b8990eada

maka sekilas terlihat mirip sma url-url web terkenal kan?? kayak facebook..  dan lain-lain

Dan maksud dari variabel token itu adalah ketika awal kita memberikan link untuk next berita or previous berita atau berita lainnya.. pokok nya yang menampilkan berita lain dah.. kita isi
$token = md5(md5($id_berita).md5('kata acak'));
jadi href nya menjadi : berita.php?id=$id_berita&token=$token

Dan pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti/diinject manual oleh user dengan cara :

$id_berita=$_GET['id_berita'];
$token=$_GET['token'];
$cek=md5(md5($id_berita).md5('kata acak'));
if($token==$cek){
   //syntak menampilkan berita disini
}
else{
   echo "SQL Injection detected..!!!!";
}

#3. Khusus form login, gunakan enkripsi password atau rubahlah algoritma otentikasi saat login.

Biasanya programmer saat melakukan pengecekan ketika user login dengan melakukan query ke database:

$input_username=$_POST[username];
$input_password=$_POST[password];

$q="SELECT * FROM tbl_user where username='$input_username' and password='$input_passsword'";
$r=mysql_query($q);
$jml_row=mysql_num_rows($r);
if($jml_row > 0){
     echo "login sukses";
}
else{
     echo "login gagal";
}

algoritma otentikasi login seperti itu sangat mudah terinfeksi penetrasi SQL Injection..
solusi pertama >> dari hal tersebut adalah dengan membuat enkripsi pada password dengan cara
skrip berikut :

$input_password=$_POST[password];
dirubah menjadi:
$input_password=md5(md5($_POST[password]).md5('karakter acak'));

tentunya password di database juga telah terenkripsi

Solusi kedua >> adalah dengan merubah algoritma menjadi

$d=mysql_fetch_array($r);
if($jml_row >0 && ($d[password]==$input_password))   

(di tambah pengecekan inputan password terhadap password di database)

Solusi ketiga >> adalah dengan mengamankan form login dari serangan byPass

Gimana? mudah bukan cara mencegah SQL Injection pada PHP-MySQL ?
sekarang Anda tinggal mempraktikkannya pada web Anda.. semoga berhasil dan aman dari Hacker SQL Injection method

0 comments:

Post a Comment