Pengaturan

Gambar

Lainnya

Tentang KASKUS

Pusat Bantuan

Hubungi Kami

KASKUS Plus

© 2024 KASKUS, PT Darta Media Indonesia. All rights reserved

mybutyAvatar border
TS
mybuty
Cara Melindungi Website PHP Anda dari SQL Injection
Sebagai developer web, saya sering membaca artikel tentang hacker, yang dimana hacker tersebut melakukan infiltrasi website melalui metode yang ditakuti yaitu ‘SQL Injection’ dan kemudian hacker tersebut benar-benar mengambil kendali, merubah, mendapatkan akses, atau merusak website yang telah berhasil diobobol olehnya. Sebagai sesama web developer, saya yakin Anda ingin tahu bagaimana untuk melindungi website anda dari SQL Injection. Jika pada artikel sebelumnya saya pernah membahas tentang Cara Menemukan SQL Injections Menggunakan HTTP Logs. Pada artikel ini, Anda akan mengetahui apa itu SQL Injection, apa yang dapat Anda lakukan untuk mencegah serangan SQL Injection, dan rekomendasi tambahan dari saya yang mudah untuk dilakukan untuk membuat website Anda lebih aman.

Cara Melindungi Website PHP Anda dari SQL Injection


Sebenarnya, Apa itu SQL Injections?
Quote:


Contoh :

Misalkan Anda seorang profesional dengan bisnis Anda sendiri. Anda telah membuat database SQL dengan tabel yang berisi semua informasi klien Anda, yang Anda gunakan untuk mengirimkan pemberitahuan penting, penagihan, dll. Anda butuh satu tahun untuk mendapatkan 50.000 klien yang sangat penting.

Contohnya ini adalah SQL query Anda di PHP log-in script Anda :

Code:
<?

$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' ";

?>


Suatu hari, seorang hacker mengatakan bahwa dirinya telah berhasil masuk ke dalam databese anda. Ia menggunakan username Anda lalu Login

Code:
';SHOW TABLES;


Si hacker tersebut kini telah berhasil masuk kemudian melihat setiap table di databese Anda. Sampai si hacker tersebut mengetahui nama table Anda kemudian melakukan :

Code:
';DROP TABLE [nama table Anda];


Maka dengan begitu semua informasi di table Anda tersebut akan hilang. Karena si hacker tersebut baru saja men-drop table Anda. Lalu apa yang bisa kita lakukan untuk mencegah hal buruk ini terjadi? Berikut saya akan memberikan info kepada Anda untuk langkah apa saja yang perlu Anda lakukan sekligus rekomendasi dari saya.

Langkah 1 : Gunakan mysql_real_escape_string ()

Fungsi PHP ini pas untuk digunakan dalam query SQL dan melindungi Anda dari serangan. Query Anda sekarang akan terlihat seperti ini:

Code:
<?
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ";

?>


Langkah ke 2 : Gunakan mysql_query () Menggunakan ‘mysql_query ()’ berarti Anda memiliki perlindungan tambahan terhadap SQL Injection. Tanpa ‘mysql_query ()’ dapat memungkinkan hacker untuk menggunakan beberapa perintah SQL dari ‘username’ field Anda, bukan hanya satu, ada juga kerentanan lain. ‘mysql_query ()’ hanya akan memberikan izin satu perintah pada satu waktu. Jadi, query Anda sekarang akan terlihat seperti ini:

Code:
<?

//connection
$database = mysql_connect("localhost", "username","password");

//db selection
mysql_select_db("database", $database);

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ", $database);

?>


Rekomendasi 1: Pusatkan Koneksi Databese Anda Di dalam script Anda, Anda harus memusatkan koneksi databese Anda ke satu halaman. Pada setiap halaman yang yang dibutuhkan, cukup gunakan fungsi ‘include ()’ untuk memasukkan halaman yang informasi koneksi databasenya di SQL Anda. Hal ini akan memaksa Anda untuk membuat query dengan format yang sama pada setiap halaman yang Anda buat, dan mengurangi kemungkinan kesalahan yang menghasilkan sebuah bug. Jadi, katakanlah kita membuat sebuah file yang disebut ‘connections.php’ dan masukkan kode ini ke dalam file tersebut:

Code:
<?

//connection
$database = mysql_connect("localhost", "username","password");

//db selection
mysql_select_db("database", $database);

?>

We could modify our query using the new setup. Our log-in page would have:

<?

include("connections.php");

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ", $database);

?>


Rekomendasi 2: Clean Data pada Awal PageBanyak bahasa pemrograman memaksa Anda untuk mendeklarasikan variabel sebelum Anda dapat menggunakannya di sepanjang script. PHP tidak memaksa Anda untuk melakukan hal ini, namun, itu adalah kebiasaan yang baik untuk membersihkan variabel di awal halaman. Tentu seseorang akan bertanya, “Jika saya membersihkan setiap variabel di seluruh halaman, mengapa saya harus membersihkan variabel di atas? Apakah aku tidak melakukan hal yang sama dengan rekomendasi Anda?”. Hal ini lebih mudah jika Anda membersihkan variabel di awal halaman untuk beberapa alasan yang berbeda, di luar format.

  • Mengurangi jumlah kode yang Anda tulis.
  • Setelah variabel bersih, Anda dapat menggunakannya secara bebas di seluruh halaman, tanpa takut ada sebuah bug.
  • Terasa lebih bersih dan lebih terorganisir, memungkinkan Anda untuk bekerja lebih mudah, dan menghindari kesalahan.


Jika kita membersihkan variabel di awal halaman, script kita akan terlihat seperti ini:

Code:
<?

include("connections.php");

$username = mysql_real_escape_string( $_GET['username'] );
$password = mysql_real_escape_string( $_GET['password'] );

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .$username. " ' AND `password`= ' " .$password. " ' ", $database);

?>


Mengurangi jumlah yang harus Anda ketikkan lebih lanjut. Lihatlah contoh berikut.

Code:
<?

function cleaner($input){

//clean variable, including mysql_real_escape_string()

}

include("connections.php");

$username = cleaner( $_GET['username'] );
$password = cleaner( $_GET['password'] );

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .$username. " ' AND `password`= ' " .$password. " ' ", $database);

?>


Rekomendasi 3: Periksa Lagi, Bahkan Setelah Anda melakukan Cleaning DataAnda dapat melakukan pemeriksaan tambahan untuk mencegah proses yang tidak penting berjalan pada server Anda. Hal ini dicapai dengan menambahkan script check seperti berikut ini :

Code:
<?

function cleaner($input){

//clean variable, including mysql_real_escape_string()

}

include("connections.php");

$username = cleaner( $_GET['username'] );
$password = cleaner( $_GET['password'] );

//Check if the input is blank.

if( ($password == '') || ($username == '')){

//dont let them pass

}

//Check if they are putting in way too many characters than should be allowed.

else if( (strlen($username) > 20) || (strlen($password)> 20) ){

//dont let them pass

}

//Passed all of our checks! Run query.

else {

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .$username. " ' AND `password`= ' " .$password. " ' ", $database);

}

?>


Sekarang Anda telah berhasil melakukan pencegahan terhadap SQL Injections. Sekian mengenai Cara Melindungi Website PHP Anda dari SQL Injections. Semoga bermanfaat

- Cara Melindungi Website PHP Anda dari SQL Injection

- Cara Menemukan SQL Injections Menggunakan HTTP Logs

- Cara Membuat Social Sharing Grafik Batangan Untuk WordPress

- Cara Menghitung IOPS Pada Windows Server Cloud
0
12K
6
GuestAvatar border
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Website, Webmaster, Webdeveloper
Website, Webmaster, WebdeveloperKASKUS Official
23.3KThread4.4KAnggota
Urutkan
Terlama
GuestAvatar border
Komentar yang asik ya
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.