Wednesday, March 02, 2016

Cara mengamankan web dari sql injection


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 ) ;
}
? >



Share:

1 comment:

Popular Posts

Recent Posts