Assalamualaikum..
Oke.. berhubung di blog ini ada kategori securitycyber,tapi enggak ada postingan yang membahas keamanan, kali ini saya akan membahasNya sedikit,yaitu tentang serangan SQL injection ,[ Suntik database ] :v..
Apa SQL Injection dan Bagaimana Apakah Ini Digunakan ?Pada dasarnya , SQL Injection adalah metode yang digunakan terhadap situs dan aplikasi untuk mendapatkan akses ke situs web atau aplikasi data, disimpan dalam database SQL . SQL Injection digunakan untuk mendapatkan akses ke informasi database (atau seluruh perusahaan ) , untuk menghancurkan informasi database , atau untuk memanipulasi informasi database ini . Ini adalah metode yang digunakan untuk mengeksploitasi kerentanan keamanan dari aplikasi atau situs web . Ada berbagai jenis SQL Injection , tapi dalam artikel ini kita hanya akan mencakup dasar-dasar .Mari kita lihat bagaimana digunakan , untuk lebih memahami apa itu . Saya akan menggunakan PHP sebagai bahasa scripting dalam contoh ini . Anda dapat menggunakan mengganti bahasa apapun yang Anda gunakan . Fokusnya harus pada perintah SQL .contohMisalkan anda adalah seorang profesional dengan bisnis Anda sendiri . Anda telah membuat sebuah 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 sangat penting . Anda mengelola database Anda dengan login secara online , saat Anda melakukan perjalanan , dan melakukan apa pun yang perlu Anda lakukan , langsung dari website Anda .Query SQL Anda di PHP Anda log -in naskah, di situs web Anda :
< ?
$ q = " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " . $ _GET [ ' username ' ] . " 'AND ` password ` = ' " . $ _GET [ 'Password' ] . " ' " ;
? >
Suatu hari seorang hacker memproklamirkan diri tersandung pada situs web Anda . Dia mengklik ' Log In ' tombol. Dia memasuki berikut dalam 'username' lapangan :'; SHOW TABLES ;
Hacker kini telah ditunjukkan setiap meja yang ada di database Anda .Karena dia tahu nama tabel Anda , ia masuk :'; DROP TABLE [ nama tabel Anda ] ;
Semua informasi Anda hilang .Catatan : Ada upaya yang jauh lebih rumit dari ini , dan seseorang bisa menghabiskan banyak waktu untuk masuk ke database Anda , atau mereka bahkan dapat menggunakan suatu program untuk mencoba untuk mengeksploitasi kerentanan website Anda , database, aplikasi , dll
Langkah 1 Gunakan mysql_real_escape_string ( )Fungsi ini PHP lolos karakter khusus untuk digunakan dalam query SQL dan melindungi Anda dari serangan .Permintaan sekarang akan terlihat seperti ini :
<?
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ";
?>
Langkah 2 Gunakan mysql_query ( )Menggunakan ' mysql_query ( ) ' memiliki perlindungan tambahan terhadap SQL Injection . Sebuah permintaan tidak dibungkus dalam ' mysql_query ( ) ' dapat memungkinkan seorang hacker untuk menggunakan beberapa perintah SQL dari ' username' bidang Anda , bukan hanya satu , yaitu kerentanan lain. ' mysql_query ( ) ' hanya memungkinkan satu perintah pada satu waktu .Jadi , pertanyaan kita sekarang akan terlihat seperti ini :
< ?
/ / koneksi
$ database = mysql_connect ( " localhost " , " username" , " password" ) ;
/ / seleksi db
mysql_select_db ( "database" , $ database ) ;
$ q = mysql_query ( " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " . mysql_real_escape_string ( $ _GET [ ' username ' ] ) . " ' AND ` password ` = ' " . mysql_real_escape_string ( $ _GET [ ' password '] ) . " ' " , $ database ) ;
? >Rekomendasi : Sentralisasi Koneksi AndaDalam naskah Anda , Anda harus memusatkan koneksi Anda ke satu halaman .Pada setiap halaman yang memerlukannya , gunakan hanya ' include () ' fungsi untuk memasukkan halaman yang host informasi koneksi database SQL Anda . Hal ini akan memaksa Anda untuk membuat query dengan format yang sama pada setiap halaman yang Anda buat , dan mengurangi kemungkinan kesalahan meninggalkan kerentanan terbuka .Jadi , katakanlah kita membuat halaman yang disebut ' connections.php ' dan dimasukkan ke dalam hal-hal berikut :
< ?
/ / koneksi
$ database = mysql_connect ( " localhost " , " username" , " password" ) ;
/ / seleksi db
mysql_select_db ( "database" , $ database ) ;
? >
Kita bisa memodifikasi query kita menggunakan setup baru . Halaman log -in akan memiliki:
< ?
include (" connections.php " ) ;
$ q = mysql_query ( " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " . mysql_real_escape_string ( $ _GET [ ' username ' ] ) . " ' AND ` password ` = ' " . mysql_real_escape_string ( $ _GET [ ' password '] ) . " ' " , $ database ) ;
? >
Rekomendasi : Data yang Bersih pada Awal PageBanyak bahasa pemrograman memaksa Anda untuk mendeklarasikan variabel sebelum Anda dapat menggunakannya di seluruh script . PHP tidak memaksa Anda untuk melakukan hal ini , bagaimanapun, itu adalah kebiasaan yang baik untuk membersihkan variabel Anda di awal halaman anyway!Yakin seseorang dapat bertanya, " Jika saya membersihkan setiap variabel seluruh halaman , mengapa saya harus membersihkan variabel di atas ? Apakah saya tidak melakukan hal yang sama dengan rekomendasi Anda ? " .Hal ini lebih mudah pada Anda untuk membersihkan variabel di awal halaman untuk beberapa alasan yang berbeda , di luar format .
Ini mengurangi jumlah kode Anda harus menulis .
Setelah variabel yang bersih , Anda dapat menggunakannya secara bebas di seluruh halaman , tanpa takut kerentanan .
Hal ini bersih dan lebih terorganisasi , memungkinkan Anda untuk bekerja lebih mudah , dan menghindari kesalahan .Jika kita dibersihkan variabel di awal halaman , naskah kita akan terlihat seperti ini :
< ?
include (" connections.php " ) ;
$ username = mysql_real_escape_string ( $ _GET [ 'username' ] ) ;
$ password = mysql_real_escape_string ( $ _GET [ 'password' ] ) ;
$ q = mysql_query ( " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " $ username . . " ' AND ` password ` = ' " $ password . . " ' " , $ database ) ;
? >
Anda bahkan bisa pergi sejauh menciptakan fungsi untuk melakukan semua pembersihan untuk Anda , mengurangi jumlah yang Anda harus mengetikkan lebih lanjut. Lihatlah contoh berikut .
< ?
Fungsi bersih ( $ input ) {
/ / variabel bersih, termasuk mysql_real_escape_string ( )
}
include (" connections.php " ) ;
$ username = bersih ( $ _GET [ 'username' ] ) ;
$ password = bersih ( $ _GET [ 'password' ] ) ;
$ q = mysql_query ( " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " $ username . . " ' AND ` password ` = ' " $ password . . " ' " , $ database ) ;
? >
Rekomendasi : Periksa Bahkan Setelah Apa Adanya DibersihkanAnda dapat memiliki pemeriksaan tambahan di tempat untuk menjaga terhadap pengolahan yang tidak perlu pada server Anda . Hal ini dicapai dengan menambahkan cek untuk naskah Anda sebelum Anda pernah sampai ke titik menjalankan query , hanya menjalankan query ketika Anda menemukan data yang dapat diterima .
< ?
Fungsi bersih ( $ input ) {
/ / variabel bersih, termasuk mysql_real_escape_string ( )
}
include (" connections.php " ) ;
$ username = bersih ( $ _GET [ 'username' ] ) ;
$ password = bersih ( $ _GET [ 'password' ] ) ;
/ / Periksa apakah input kosong .
if ( ( $ password == '' ) | | ( $ username == '' ) ) {
/ / dont membiarkan mereka lewat
}
/ / Periksa apakah mereka menempatkan dalam terlalu banyak karakter daripada harus diperbolehkan .
lain jika ( ( strlen ( $ username ) > 20 ) | | ( strlen ( $ password ) > 20 ) ) {
/ / dont membiarkan mereka lewat
}
/ / Lulus semua kami cek ! Jalankan query.
else {
$ q = mysql_query ( " SELECT ` id ` FROM` pengguna `WHERE ` username ` = ' " $ username . . " ' AND ` password ` = ' " $ password . . " ' " , $ database ) ;
}
? >
.. Thanks gan .. atas infoNya
ReplyDelete