APA ITU 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 Injectionif(!is_numeric($id)) {
echo " Telah di Patched.";
exit;
}
Ket: jika nilai $id bukan merupakan angka (numeric) maka akan tampil "Telah di Patched."
$id = mysqli_real_escape_string($conn,$_GET['$id']);
Ket : Fungsi tersebut berguna untuk memberi backslash di beberapa script yang akan ditampilkan
di 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