Cara Mencegah Injeksi SQL di PHP (dengan Gambar)

Daftar Isi:

Cara Mencegah Injeksi SQL di PHP (dengan Gambar)
Cara Mencegah Injeksi SQL di PHP (dengan Gambar)

Video: Cara Mencegah Injeksi SQL di PHP (dengan Gambar)

Video: Cara Mencegah Injeksi SQL di PHP (dengan Gambar)
Video: TV Cabinet Simple Minimalist 2024, Mungkin
Anonim

Artikel wikiHow ini akan mengajarkan kepada Anda cara mencegah injeksi SQL menggunakan Pernyataan yang Disiapkan di PHP. Injeksi SQL adalah salah satu kerentanan paling umum dalam aplikasi Web saat ini. Pernyataan yang Disiapkan menggunakan parameter terikat dan tidak menggabungkan variabel dengan string SQL, sehingga penyerang tidak mungkin mengubah pernyataan SQL.

Pernyataan yang Disiapkan menggabungkan variabel dengan pernyataan SQL yang dikompilasi, sehingga SQL dan variabel dikirim secara terpisah. Variabel kemudian ditafsirkan sebagai string belaka dan bukan bagian dari pernyataan SQL. Dengan menggunakan metode dalam langkah-langkah di bawah ini, Anda tidak perlu menggunakan teknik pemfilteran injeksi SQL lainnya seperti mysql_real_escape_string().

Langkah

Bagian 1 dari 2: Memahami Injeksi SQL

Langkah 1. SQL Injection adalah jenis kerentanan dalam aplikasi yang menggunakan database SQL

Kerentanan muncul ketika input pengguna digunakan dalam Pernyataan SQL:

$nama = $_GET['nama pengguna']; $query = "PILIH kata sandi FROM tbl_user WHERE name = '$name' ";

Langkah 2. Nilai yang dimasukkan pengguna ke nama pengguna variabel URL akan ditetapkan ke variabel $name

Itu kemudian ditempatkan langsung ke dalam pernyataan SQL, sehingga memungkinkan pengguna untuk mengedit pernyataan SQL.

$nama = "admin' ATAU 1=1 -- "; $query = "PILIH kata sandi FROM tbl_user WHERE name = '$name' ";

Langkah 3. Database SQL kemudian akan menerima pernyataan SQL sebagai berikut:

PILIH kata sandi FROM tbl_users WHERE name = 'admin' OR 1=1 -- '

  • Ini adalah SQL yang valid, tetapi alih-alih mengembalikan satu kata sandi untuk pengguna, pernyataan tersebut akan mengembalikan semua kata sandi dalam tabel tbl_user. Ini bukan sesuatu yang Anda inginkan dalam aplikasi web Anda.

    Bagian 2 dari 2: Menggunakan mySQLi untuk Membuat Pernyataan yang Disiapkan

    2542820 1
    2542820 1

    Langkah 1. Buat Query mySQLi SELECT

    Gunakan kode di bawah ini untuk PILIH data dari tabel menggunakan Pernyataan yang Disiapkan mySQLi.

    $nama = $_GET['nama pengguna']; if ($stmt = $mysqli->prepare("SELECT password FROM tbl_users WHERE name=?")) { // Mengikat variabel ke parameter sebagai string. $stmt->bind_param("s", $nama); // Jalankan pernyataan. $stmt->eksekusi(); // Dapatkan variabel dari kueri. $stmt->bind_result($pass); // Ambil datanya. $stmt->ambil(); // Menampilkan datanya. printf("Password untuk user %s adalah %s\n", $nama, $pass); // Tutup pernyataan yang sudah disiapkan. $stmt->tutup(); }

    Catatan: Variabel $mysqli adalah Objek Koneksi mySQLi

    2542820 2
    2542820 2

    Langkah 2. Buat kueri INSERT mySQLi

    Gunakan kode di bawah ini untuk MEMASUKKAN data ke dalam tabel menggunakan Pernyataan yang Disiapkan mySQLi.

    $nama = $_GET['nama pengguna']; $sandi = $_GET['sandi']; if ($stmt = $mysqli->prepare("INSERT INTO tbl_users (name, password) VALUES (?, ?)")) { // Mengikat variabel ke parameter sebagai string. $stmt->bind_param("ss", $nama, $sandi); // Jalankan pernyataan. $stmt->eksekusi(); // Tutup pernyataan yang sudah disiapkan. $stmt->tutup(); }

    Catatan: Variabel $mysqli adalah Objek Koneksi mySQLi

    2542820 3
    2542820 3

    Langkah 3. Buat Query UPDATE mySQLi

    Gunakan kode di bawah ini untuk MEMPERBARUI data dalam tabel menggunakan Pernyataan yang Disiapkan mySQLi.

    $nama = $_GET['nama pengguna']; $sandi = $_GET['sandi']; if ($stmt = $mysqli->prepare("UPDATE tbl_users SET password = ? WHERE name = ?")) { // Ikat variabel ke parameter sebagai string. $stmt->bind_param("ss", $sandi, $nama); // Jalankan pernyataan. $stmt->eksekusi(); // Tutup pernyataan yang sudah disiapkan. $stmt->tutup(); }

    Catatan: Variabel $mysqli adalah Objek Koneksi mySQLi

    2542820 4
    2542820 4

    Langkah 4. Buat Query mySQLi DELETE

    Skrip di bawah ini adalah cara MENGHAPUS data dari tabel menggunakan Pernyataan yang Disiapkan mySQLi.

    $nama = $_GET['nama pengguna']; $sandi = $_GET['sandi']; if ($stmt = $mysqli->prepare("DELETE FROM tbl_users WHERE name = ?")) { // Mengikat variabel ke parameter sebagai string. $stmt->bind_param("s", $nama); // Jalankan pernyataan. $stmt->eksekusi(); // Tutup pernyataan yang sudah disiapkan. $stmt->tutup(); }

Direkomendasikan: