BUMI NATURAL
Teknik Mencegah SQLInjection pada PHP - Lagi-lagi tentang teknik scripting pada PHP, mau tidak mau para programer harus wajib juga mempelajari berbagai teknik scripting agar sistem yang dikelola oleh seorang programer tersebut dapat selalu terawat dan terbebas dari berbagai ancaman dan berbagai hal yang tidak diinginkan. Seperti para hacking, cracking atau yang sejenisnya.
Kali ini saya sebagai newbie mencoba membahas salah satu teknik scripting dengan PHP yaitu SQL Injection. SQL Injection ini adalah salah satu teknik para hacker untuk membobol sebuah sistem pada sebuah situs dengan mengirimkan perintah query SQL dengan menggunakan metode GET atau POST yang memanfaatkan kelemahan sistem. Kelemahan sistem di sini bisa berasal dari script atau programnya sendiri atau dari dalam server.
Pada postingan ini saya bukan mengajarkan lho, saya hanya 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:
ketika akan membaca isi dari variabel id biasanya kita menggunakan syntak
jadi setiap isi dari id pada url akan disimpan pada variable $id
Dan berikut adalah query yang menghubungkan ke database
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:
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
Maka kita perlu menambahkan variabel yg berisi enkripsi md5 dari id yg kita modifikasi dengan string acak menjadi
Maksud dari variabel token diatas ketika awal kita memberikan link untuk
menampilkan berita lain, maka id dari berita tersebut kita enkripsi
seperti berikut ini
Sekarang pada halaman tampil berita kita tambahkan pengecekan apakah id berita diganti/diinject manual oleh user dengan cara :
$value) {
if (strpos($param, 'color_') === 0) {
google_append_color($google_ad_url, $param);
} else if (strpos($param, 'url') === 0) {
$google_scheme = ($GLOBALS['google']['https'] == 'on')
? 'https://' : 'http://';
google_append_url($google_ad_url, $param,
$google_scheme . $GLOBALS['google'][$param]);
} else {
google_append_globals($google_ad_url, $param);
}
}
return $google_ad_url;
}
$google_ad_handle = @fopen(google_get_ad_url(), 'r');
if ($google_ad_handle) {
while (!feof($google_ad_handle)) {
echo fread($google_ad_handle, 8192);
}
fclose($google_ad_handle);
}
?>
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:
Autentikasi login seperti diatas sangat rentan terhadap penetrasi SQL Injection..
solusi pertama dengan melakukan enkripsi pada password yaitu dengan mengganti
skrip berikut :
Solusi kedua yaitu dengan merubah algoritma menjadi:
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
Nah, demikian tips yang dapat saya sampaikan pada posting kali ini
Teknik Mencegah SQLInjection pada PHP - Lagi-lagi tentang teknik scripting pada PHP, mau tidak mau para programer harus wajib juga mempelajari berbagai teknik scripting agar sistem yang dikelola oleh seorang programer tersebut dapat selalu terawat dan terbebas dari berbagai ancaman dan berbagai hal yang tidak diinginkan. Seperti para hacking, cracking atau yang sejenisnya.
Kali ini saya sebagai newbie mencoba membahas salah satu teknik scripting dengan PHP yaitu SQL Injection. SQL Injection ini adalah salah satu teknik para hacker untuk membobol sebuah sistem pada sebuah situs dengan mengirimkan perintah query SQL dengan menggunakan metode GET atau POST yang memanfaatkan kelemahan sistem. Kelemahan sistem di sini bisa berasal dari script atau programnya sendiri atau dari dalam server.
Pada postingan ini saya bukan mengajarkan lho, saya hanya 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:
1 | http: //situskorban.com/berita.php?id=1 |
1 | <?php |
2 |
3 | $id = $_GET [ 'id' ]; |
4 |
5 | ?> |
Dan berikut adalah query yang menghubungkan ke database
1 | "SELECT * FROM tbl_berita WHERE id='$id'" |
Solusinya adalah kita buat id menjadi absolute integer dengan mengubah sintaks pembacaan variabel get id menjadi:
1 | <?php |
2 |
3 | $id = abs ((int) $_GET [ 'id' ]); |
4 |
5 | ?> |
2. Dengan menambahkan variabel get berisi enkripsi md5 yg divariasi pada url
Seperti pada no.1 diatas dengan mengunakan URL
1 | http: //situskorban.com/berita.php?id=1 |
1 | http: //situskorban.com/berita.php?id=1&token=jk340i34a3fdvaj4333j3n43jj42l30abyk9 |
1 | <?php |
2 |
3 | $token = md5(md5( $id_berita ).md5( 'kata acak' )); |
4 |
5 | //url beritanya |
6 | <a href= "berita.php?id=$id_berita&token=$token" >Judul Berita</a> |
7 |
8 | ?> |
01 | <?php |
02 |
03 | $id_berita = $_GET [ 'id_berita' ]; |
04 | $token = $_GET [ 'token' ]; |
05 | $cek =md5(md5( $id_berita ).md5( 'kata acak' )); |
06 | if ( $token == $cek ){ |
07 | //masukkan syntak untuk menampilkan berita disini |
08 | } |
09 | else { |
10 | echo "SQL Injection detected..!!!!" ; |
11 | } |
12 |
13 | ?> |
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:
01 | <?php |
02 |
03 | $username = $_POST [username]; |
04 | $password = $_POST [password]; |
05 | |
06 | $r =mysql_query( "SELECT * FROM tbl_user WHERE username='$username' and password='$password'" ); |
07 | $jml_row =mysql_num_rows( $r ); |
08 | if ( $jml_row > 0){ |
09 | echo "Login Sukses" ; |
10 | } |
11 | else { |
12 | echo "Login Gagal" ; |
13 | } |
14 |
15 | ?> |
solusi pertama dengan melakukan enkripsi pada password yaitu dengan mengganti
skrip berikut :
1 | <?php |
2 |
3 | $password =md5( $_POST [password]); |
4 |
5 | ?> |
1 | $d =mysql_fetch_array( $r ); |
2 | if ( $jml_row >0 && ( $d [password]== $password )) |
Berikut adalah hasil dari script yang telah kita ubah tadi
01 | <?php |
02 |
03 | $username = $_POST [username]; |
04 | $password = md5( $_POST [password]); |
05 | |
06 | $r =mysql_query( "SELECT * FROM tbl_user WHERE username='$username' and password='$password'" ); |
07 |
08 | $jml_row = mysql_num_rows( $r ); |
09 | $d =mysql_fetch_array( $r ); |
10 |
11 | if ( $jml_row >0 && ( $d [password]== $password )){ |
12 | echo "Login Sukses" ; |
13 | } |
14 | else { |
15 | echo "Login Gagal" ; |
16 | } |
17 |
18 | ?> |