Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP / MySQLi:Bagaimana mencegah injeksi SQL pada INSERT (kode berfungsi sebagian)

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hanya baris pertama dari kueri sql yang ditampilkan

  2. Bagaimana cara menampilkan semua tabel dengan informasi lebih lanjut (membuat tanggal, ukuran, ...) dalam database MySQL?

  3. Apa yang setara dengan php dari @row:[email protected]+1

  4. MySQL Tampilkan status tabel, kenaikan otomatis tidak benar

  5. konvensi penamaan mysql