Cara Mencegah Akses SQL Injection di PHP

"SQL Injection" yaitu trik hacking dengan cara mengedit isi dari variabel get yang ada di url untuk melakukan penetrasi kedalam database.. teknik SQL Injection juga bsa di lakukan pada form login dengan membaypass atau melewati autentikasi login dengan syntak SQL..

Review SQL Injection  ngacir-) :   fakta1::

Percaya atau tidak kalau mengamankan web itu lebih sulit daripada merusak tampilan atau merusak database dari web tersebut. Maraknya deface dan hacking yg dilakukan oleh beberapa orang yg dikarenakan kesalahan konfigurasi system atau kurangnya pengetahuan webmaster masih sering dilakukan.

1. Pencegahan SQL Injection, contoh sintak SQL Injection :

?or 1=1–

Penyerangan melalui teknik ini sama artinya dng penyerangan terhadap database. Untuk melakukan pencegahan terhadap SQL Injection ini, pertama seperti kita ketahui karakter ( ? ), (–), (NULL), (\x00), (\n), (\r), (?), (/), (/x1a) merupakan biang masalah dari SQL ini, tips nya yaitu escape semua special karakter tersebut untuk php/mysql:

mysql_real_escape_string. Atau dengan cara kedua yaitu filter semua karakter yang masuk dan hanya mengijinkan karakter ttt yg dpt di inputkan. Yg perlu diingat, Sql injection ini tidak hanya bisa masuk melalui inputan dari user tetapi juga bisa melalui URL dengan bantuan karakter ( ; ) yang arti dari karakter itu adalah ?baris dibelakang ; akan ikut di eksekusi?. Disarankan, abaikan semua karakter setelah alamat URL. Contoh script yang membatasi karakter yang bisa masukkan :

function validatepassword( input )

good_password_chars =

“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”

validatepassword = true

for i = 1 to len( input )

c = mid( input, i, 1 )

if ( InStr( good_password_chars, c ) = 0 ) then

validatepassword = false

exit function

end if

next

end function

2. Pencegahan XSS (Cross Side Scripting), contoh script XSS :
Pencurian cookie biasanya sering dilakukan melalui teknik ini. Dengan ditemukan kelemahan XSS ini maka user dapat menjalankan script melalui form, buku tamu atau URL. Walaupun perubahan yang bisa dilakukan hanya bersifat clien tetapi bila cookie dicuri lain soal…..! Jadi untuk mencegah XSS adalah dengan Konversi < dan > menjadi menjadi lt; dan gt; dan dengan diawali karakter & (itu berarti pengganti nilai < dan > dlm tag HTML) dan filter semua inputan dari user.

3. Pemasukkan Tag HTML.
Biasa cara ini kebanyakan dilakukan melalui buku tamu. Dengan cara ini seseorang dapat menambahkan tampilan sesuai dengan keinginan mereka. Dari beberapa pengalaman, biasanya para web master melakukan pencegahan ini dengan menambahkan karakter tertentu di awal karakter < atau >. Tapi fungsi untuk mencegah tag HTML sekarang sudah disediakan langsung oleh PHP jadi kita tinggal pakai saja (htmlspecialchars).

Contoh script :

function cleanup($value=”", $preserve=”", $tag=”") {

if (empty($preserve)) {

$value=strip_tags($value, $allowed_tags);

}

$value=htmlspecialchars($value);

return $value;

}

4. Batasi penggunaan Java Script dan jangan menggunakan java script untuk membuat sesuatu yang akan meyangkut hidup matinya web anda, karena java script bersifat client dan membuat akses yang akan sangat lambat. Disarankan gunakan aplikasi yang lain seperti PHP dan ASP karena sudah bersifat server.

5. Penyimpanan file database sebaiknya disimpan dlm directory private. Jangan pernah menyimpannya di directory public yang memungkinkan orang lain dapat mengaksesnya. Tapi biasanya di web hosting sudah menyediakan direktori khusus untuk database. Dalam keamanan database harus dilindungi dengan password. Koneksi sebaiknya di enkripsi dengan SSL. Data yang penting jangan disimpan secara langsung melainkan sebagai hash (md5) atau modifikasi dari md5 yaitu SHA-256 dan SHA-512 atau terenkripsi dengan bahasa pemrograman lain misalnya PHP.

6. Berhati hatilah memilih webhosting, itu sudah kami buktikan. Sehebat apapun web yang dibuat walaupun pengecekan password dibuat 2 kali dan di encrypt berapa kalipun kalau sudah server yang diserang kita tidak bisa berbuat apa apa.

Sumber :
KOMUNITAS PELAJAR ILMU KOMPUTER INDONESIA

hoax-)  Eitss tpi dsni ane ga ngajarin cara hacking nya tpi cara bagaimana cara mengantisipasinya :)
ini Dia triknya....Cekidot...  ngacir-)

1. Dengan cara menjadikan variabel get menjadi absolute integer


Penjelasan:
    Biasanya para hacker melakukan penetrasi terhadap variabel id yang kita letakkan pada url..
Contoh :

pada url http://webkamu/berita.php?id=1
    ketika akan membaca isi dari variabel id biasanya kita menggunakan syntak

Quote
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'"

     nah melalui variabel $id ini lah para hacker menggunakan teknik SQL Injection, dengan   memasukkan perintah2 SQL yang dapat mengeksploitasi database..

    Solusinya:
    kita buat id menjadi absolute integer dengan mengubah sintaks pembacaan variabel get id menjadi:
    $id = abs((int)$_GET['id']);

    fungsi 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.


Quote
2. Dengan menambahkan variabel get berisi enkripsi md5 yg divariasi pada url

Quote

 jika awal url adalah
     http://webkamu/berita.php?id=1

   maka kita akan menambahkan variabel yg berisi enkripsi dari id yg kita modifikasi dengan string acak menjadi
     http://webkamu/berita.php?id=1&token=9b0443e36affedbafe882a4bbb90eaec

nah sekilas terlihat mirip sma url2 facebook.. wahh kereeen :)

ok, saya jelaskan maksud dari variabel token diatas, jadi 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

sekarang 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..!!!!";
}

nah slsai deh,, hehehe   ngakak-_- 

Quote
3. Khusus untuk form login, dengan melakukan enkripsi password atau merubah algoritma autentikasi login. 

Quote

  biasanya kita melakukan pengecekan ketika user login yaitu dengan melakukan query kedatabase:

$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";
}

nah algoritma autentikasi login seperti diatas sangat rentan terhadap penetrasi SQL Injection..
solusi pertama dengan melakukan enkripsi pada password yaitu dengan mengganti
skrip berikut :

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

tentunya yang berakibat dengn mengenkripsi semua password di database sesuai enkripsi diatas.. :)

(semoga ga pada pusing yah :D)

solusi kedua yaitu dengan merubah algoritma menjadi

$d=mysql_fetch_array($r);
if($jml_row >0 && ($d[password]==$input_password))            << di tambah pengecekan inputan password thd password di dtabase


  jempol2 OK deh sekian dlu trik mengatasi SQL Injection.nya.. Dan Masih Banyak Lagi Cara untuk pengamanannya...  jempol2

Sumber : Forum Sebelah

luv-indo;)  alay-)  newyear-)  newyear-)  newyear-)  rate-)  newyear-)  newyear-)  newyear-)  alay-)  luv-indo;)

0 komentar:

Copyright © 2012 Nugasoft Production.