Tersenyumlah selalu walaupun hatimu sedang terluka.



Hello Lagi Gaess
Balik lagi ama gw AlfredoGanz😎

Di Artikel ini gw bakal bahas cara patching bug SQL injection
Ok lanjut aja jangan lama lama lagi


APA ITU SQL INJECTION

SQL Injection (SQLi) adalah jenis serangan dimana perintah SQL disuntikkan ke input data atau semacamnya untuk memengaruhi perintah SQL yang telah ditetapkan. Serangan ini digunakan atacker untuk mendapatkan akses langsung ke database. Dan dengan demikian sang attacker bisa membaca data sensitif, hingga memodifikasi database (masukkan, perbarui, hapus). Celah Sqli ini bisa dibilang celah aplikasi web tertua, paling umum, tapi sangat berbahaya.


Nah biasa nya itu aplikasi dan situsweb modern menggunakan bentuk konten yang dinamis. 
Konten tersebut bisa dalam bentuk artikel, buku tamu, page, gallery, detail produk, halaman login, dll. Dengan demikian dalam scriptingnya pasti melibatkan database sebagai penyimpan data konten dinamis tadi.


berikut ini contoh code atau script yang rentan terhadap SQL Injection:

<?php 
// (nama host, username mysql, password, nama table)
$conn = mysqli_connect("localhost","root","","sqli");
 if ($conn->connect_errno) {
    echo die("Failed to connect to MySQL: " . $conn->connect_error);
}
$id = $_GET['id']; 
$stmt = mysqli_query($conn, "SELECT * FROM user where id ='$id' "); 
    while($row = mysqli_fetch_array($stmt)){
?>

Nah bisa dilihat di atas kalau code tersebut tidak adanya filtering terhadap karakter seperti ('), ("), (-), sehingga script tersebut bisa di eksekusi dengan SQL Injection

Gimana Cara PatchNya?

Bisa dengan beberapa script tersebut: 

Menggunakan fungsi is_numeric()
if(!is_numeric($id)) { 
echo " Telah di Patched."; 
exit;
}

Ket: jika nilai $id bukan merupakan angka (numeric) maka akan tampil "Telah di Patched."


Menggunakan fungsi mysqli_real_escape_string().
$id = mysqli_real_escape_string($conn,$_GET['$id']);

Ket : Fungsi tersebut berguna untuk memberi backslash di beberapa script yang akan ditampilkandi halaman, namun saat menyimpan menuju database, kode akan tetap normal tanpa ada backslash.


Bisa Juga Dengan Prepared Statement
<?php 
// (nama host, username mysql, password, nama table)
$conn = mysqli_connect("localhost","root","","sqli");
 if ($conn->connect_errno) {
    echo die("Failed to connect to MySQL: " . $conn->connect_error);
}
// Prepare
$stmt = $conn->prepare("SELECT * FROM user where id = ? ")
// Bind
$stmt->bind_param("s", $_GET['id']);
// Execute
$stmt->execute();
$hasil = $stmt->get_result();
    while($row = mysqli_fetch_array($hasil)){
?>

Proses pembuatan prepared statements membutuhkan 3 langkah yaitu Prepared, Bind, dan Execute.

Pada proses prepared, kita mempersiapkan query yang akan dijalankan, tetapi tanpa mengisi 'data'.Bagian dimana 'data' berada digantikan dengan tanda tanya (?) sebagai tanda bahwa bagian ini akan diisi dengan variable data.

Proses adalah Bind, merupakan proses kedua setelah query dilakukan, dimana nantinya akan ada sebuah proses pengiriman data yang sebelumnya telah di tandai dalam sebuah proses prepare pada query yang menggunakan tanda (?). Hal yang harus diperhatikan adalah data type yang kita kirim sebagai variable, sebagai contoh diatas saya isi dengan (s) yang berarti tipe data berupa string, (i) untuk integer, (d) untuk double, dan (b) untuk boolean.

Proses berikutnya adalah mengeksekusi prepared query yang telah kita buat.

Ok segitu aja tentang cara patching bug sql injection nya : )

jangan lupa share ya..


Source:https://www.metaxploit.org

Subscribe Our Newsletter

0 Response to "Cara Patching Bug SQL Injection"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel