Cara Mencegah Suntikan SQL di PHP (dengan Gambar)

Isi kandungan:

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

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

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

WikiHow ini mengajar anda cara mencegah suntikan SQL menggunakan Penyataan Bersedia di PHP. Suntikan SQL adalah salah satu kelemahan yang paling biasa dalam aplikasi Web hari ini. Penyataan yang Disiapkan menggunakan parameter terikat dan tidak menggabungkan pemboleh ubah dengan rentetan SQL, sehingga mustahil bagi penyerang untuk mengubah pernyataan SQL.

Penyediaan Bersedia menggabungkan pemboleh ubah dengan penyataan SQL yang disusun, sehingga SQL dan pemboleh ubah dihantar secara berasingan. Pemboleh ubah kemudian ditafsirkan sebagai rentetan belaka dan bukan sebahagian daripada pernyataan SQL. Dengan menggunakan kaedah dalam langkah di bawah, anda tidak perlu menggunakan teknik penyaringan suntikan SQL lain seperti mysql_real_escape_string ().

Langkah-langkah

Bahagian 1 dari 2: Memahami SQL Injection

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

Kerentanan timbul apabila input pengguna digunakan dalam Pernyataan SQL:

$ name = $ _GET ['nama pengguna']; $ query = "PILIH kata laluan DARI tbl_user DI MANA nama = '$ name'";

Langkah 2. Nilai yang dimasukkan pengguna ke dalam nama pengguna pemboleh ubah URL akan diberikan kepada nama $ pemboleh ubah

Ia kemudian dimasukkan terus ke dalam pernyataan SQL, memungkinkan pengguna menyunting pernyataan SQL.

$ name = "admin 'ATAU 1 = 1 -"; $ query = "PILIH kata laluan DARI tbl_user DI MANA nama = '$ name'";

Langkah 3. Pangkalan data SQL kemudian akan menerima penyataan SQL seperti berikut:

PILIH kata laluan DARI tbl_users DI MANA nama = 'admin' ATAU 1 = 1 - '

  • Ini adalah SQL yang sah, tetapi bukannya mengembalikan satu kata laluan untuk pengguna, pernyataan itu akan mengembalikan semua kata laluan dalam jadual tbl_user. Ini bukan sesuatu yang anda mahukan dalam aplikasi web anda.

    Bahagian 2 dari 2: Menggunakan mySQLi untuk Membuat Penyataan Bersedia

    2542820 1
    2542820 1

    Langkah 1. Buat Pertanyaan SELECT mySQLi

    Gunakan kod di bawah untuk PILIH data dari jadual menggunakan Penyataan Bersedia mySQLi.

    $ name = $ _GET ['nama pengguna']; if ($ stmt = $ mysqli-> persiapkan ("PILIH kata laluan DARI tbl_users DI MANA nama =?")) {// Ikatan pemboleh ubah ke parameter sebagai rentetan. $ stmt-> bind_param ("s", $ name); // Laksanakan penyataan. $ stmt-> laksanakan (); // Dapatkan pemboleh ubah dari pertanyaan. $ stmt-> bind_result ($ lulus); // Ambil data. $ stmt-> ambil (); // Paparkan data. printf ("Kata laluan untuk pengguna% s adalah% s / n", $ name, $ pass); // Tutup penyataan yang telah disediakan. $ stmt-> tutup (); }

    Nota: Pemboleh ubah $ mysqli adalah Objek Sambungan mySQLi

    2542820 2
    2542820 2

    Langkah 2. Buat Pertanyaan INSERT mySQLi

    Gunakan kod di bawah untuk memasukkan data ke dalam jadual menggunakan Penyataan Bersedia mySQLi.

    $ name = $ _GET ['nama pengguna']; $ kata laluan = $ _GET ['kata laluan']; if ($ stmt = $ mysqli-> persiapkan ("MASUKKAN DALAM tbl_users (nama, kata laluan) NILAI (?,?)")) {// Ikatan pemboleh ubah ke parameter sebagai rentetan. $ stmt-> bind_param ("ss", $ name, $ password); // Laksanakan penyataan. $ stmt-> laksanakan (); // Tutup penyataan yang telah disediakan. $ stmt-> tutup (); }

    Catatan: Pemboleh ubah $ mysqli adalah Objek Sambungan mySQLi

    2542820 3
    2542820 3

    Langkah 3. Buat Pertanyaan mySQLi UPDATE

    Gunakan kod di bawah untuk MENGEMASKINI data dalam jadual menggunakan Penyataan Bersedia mySQLi.

    $ name = $ _GET ['nama pengguna']; $ kata laluan = $ _GET ['kata laluan']; if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password =? WHERE name =?")) {// Ikatan pemboleh ubah ke parameter sebagai rentetan. $ stmt-> bind_param ("ss", $ kata laluan, $ nama); // Laksanakan penyataan. $ stmt-> laksanakan (); // Tutup penyataan yang telah disediakan. $ stmt-> tutup (); }

    Nota: Pemboleh ubah $ mysqli adalah Objek Sambungan mySQLi

    2542820 4
    2542820 4

    Langkah 4. Buat Pertanyaan DELETE mySQLi

    Skrip di bawah adalah cara MENGHAPUS data dari jadual menggunakan Penyataan Bersedia mySQLi.

    $ name = $ _GET ['nama pengguna']; $ kata laluan = $ _GET ['kata laluan']; if ($ stmt = $ mysqli-> persiapkan ("HAPUS DARI tbl_users DI MANA nama =?")) {// Ikatan pemboleh ubah ke parameter sebagai rentetan. $ stmt-> bind_param ("s", $ name); // Laksanakan penyataan. $ stmt-> laksanakan (); // Tutup pernyataan yang telah disediakan. $ stmt-> tutup (); }

Disyorkan: