Dalam Kode PHP baru snippet, Anda masih rentan terhadap suntikan.
Anda menggunakan pernyataan yang disiapkan di bagian sisipan, tetapi Anda tidak benar-benar menggunakan kekuatan persiapan dengan benar.
Saat membuat pernyataan yang disiapkan, Anda membuat kueri di mana Anda menambahkan placeholder alih-alih nilai mentah:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Tanda tanya adalah placeholder dan kemudian diganti dengan menggunakan bind_param
metode:
$stmt->bind_param('ss', $email, $pw);
ss
bagian dari panggilan bind memberitahu db mysql bahwa dua string yang diteruskan ke database (s untuk string
, i untuk int
dll).
Anda mengikat param ($name
) tetapi tidak memiliki tempat penampung atau jenis referensi apa pun dalam kueri..?
Pernyataan pilih Anda di sisi lain masih tidak aman dan terbuka untuk kerentanan.
Saya mungkin akan menggunakan pernyataan yang disiapkan di sana, seperti halnya dengan bagian sisipan.
Anda selalu ingin memastikan bahwa input dari pengguna "aman" untuk database, jika Anda menggabungkan string kueri dan menambahkan input pengguna ke dalamnya, database tidak akan keluar dari string, itu hanya akan menjalankannya.
Hanya gunakan query
standar pemanggilan metode saat Anda menulis kueri lengkap sendiri, tanpa parameter input apa pun, dan terutama tanpa parameter input yang diteruskan pengguna!