Teknik mencegah coding php dari sql injection

Saturday, October 14, 20170 comments

Pada postingan ini saya  ingin berbagi agar kedepannya postingan ini dapat bermanfaat untuk Anda terutama untuk saya. Toh teknik ini saya dapat dari situs lain yang membahas tetang teknik yang sama.

Baiklah, tanpa basa-basi lagi mari saja kita memulai tekniknya.

1. Dengan cara menjadikan variabel get menjadi absolute integer
SQL Injection biasanya para hacker melakukan penetrasi terhadap variabel id yang kita letakkan pada url.

Contoh:
http://situskorban.com/berita.php?id=1
ketika akan membaca isi dari variabel id biasanya kita menggunakan syntak
<?php

$id = $_GET['id'];

?>
jadi setiap isi dari id pada url akan disimpan pada variable $id

Dan berikut adalah query yang menghubungkan ke database
"SELECT * FROM tbl_berita WHERE id='$id'"
Pada variabel $id ini lah hacker dapat menggunakan SQL Injection dengan memasukkan perintah2 SQL yang dapat mengeksploitasi database.

Solusinya adalah kita buat id menjadi absolute integer dengan mengubah sintaks pembacaan variabel get id menjadi:
<?php

$id = abs((int)$_GET['id']);

?>
Mengapa ditambah abs()? karena abs() digunakan 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. Dengan menambahkan variabel get berisi enkripsi md5 yg divariasi pada url
Seperti pada no.1 diatas dengan mengunakan URL
http://situskorban.com/berita.php?id=1
Maka kita perlu menambahkan variabel yg berisi enkripsi md5 dari id yg kita modifikasi dengan string acak menjadi
http://situskorban.com/berita.php?id=1&token=jk340i34a3fdvaj4333j3n43jj42l30abyk9
Maksud dari variabel token diatas ketika awal kita memberikan link untuk menampilkan berita lain, maka id dari berita tersebut kita enkripsi seperti berikut ini
<?php

$token = md5(md5($id_berita).md5('kata acak'));

//url beritanya
<a href="berita.php?id=$id_berita&token=$token">Judul Berita</a>

?>
Sekarang pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti/diinject manual oleh user dengan cara :
<?php

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

?>
Tinggal Anda coba terapkan di situs Anda

3. Untuk form login, dengan melakukan enkripsi password atau merubah algoritma autentikasi login
Mungkin sobat semua udah pada tahu pada point yang ke-3 ini yaitu menggunakan md5 untuk autentikasi pengecekan pada saat user login. Namun walaupun begitu saya coba untuk membahasnya kembali untuk yang belum tahu.

Biasanya pada form login melakukan pengecekan ketika user login yaitu dengan melakukan query ke database secara langsung. Contohnya sebagai berikut:
<?php

$username = $_POST[username];
$password = $_POST[password];
 
$r=mysql_query("SELECT * FROM tbl_user WHERE username='$username' and password='$password'");
$jml_row=mysql_num_rows($r);
if($jml_row > 0){
     echo "Login Sukses";
}
else{
     echo "Login Gagal";
}

?>
Autentikasi login seperti diatas sangat rentan terhadap penetrasi SQL Injection..
solusi pertama dengan melakukan enkripsi pada password yaitu dengan mengganti
skrip berikut :
<?php

$password=md5($_POST[password]);

?>
Solusi kedua yaitu dengan merubah algoritma menjadi:
$d=mysql_fetch_array($r);
if($jml_row >0 && ($d[password]==$password))
Dilihat dari script diatas bahwa Anda dapat menambah pengecekan inputan password thd password di database.

Berikut adalah hasil dari script yang telah kita ubah tadi
<?php

$username = $_POST[username];
$password = md5($_POST[password]);
 
$r=mysql_query("SELECT * FROM tbl_user WHERE username='$username' and password='$password'");

$jml_row = mysql_num_rows($r);
$d=mysql_fetch_array($r);

if($jml_row >0 && ($d[password]==$password)){
     echo "Login Sukses";
}
else{
     echo "Login Gagal";
}

?>
Nah, demikian tips yang dapat saya sampaikan pada posting kali ini dengan judul Teknik Mencegah SQL Injection pada PHP. Mungkin dapat Anda terapkan dalam sistem yang Anda bangun dan semoga bermanfaat bagi kita semua.
Share this article :

Post a Comment

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. Tutorial Web Programming - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger