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

Cara Terbaik untuk Mengamankan Query SQL di PHP

Kueri yang Anda tunjukkan dalam pertanyaan tidak menggunakan nilai yang disediakan pengguna sehingga tidak ada kasus SQL Injection tetapi dalam kasus umum:-

Pertama, Anda harus memvalidasi semua masukan pengguna (nama pengguna, email, dll.) sebelum menggunakannya dalam kueri. Misalnya:- Jika Anda hanya mengizinkan karakter alfanumerik dalam nama pengguna, maka Anda harus memeriksa apakah masukan tersebut benar-benar alfanumerik atau tidak sebelum melanjutkan untuk membentuk kueri basis data dan Anda juga harus memeriksa ukuran semua masukan.

Setelah itu, menurut saya, Pernyataan yang Disiapkan adalah pilihan terbaik untuk mencegah injeksi SQL.

Masalah dengan mysql_real_escape_string():-

Karena mysql_real_escape_string() lolos karakter sesuai dengan charset default, jadi ini lebih baik daripada fungsi addlashes() dan membersihkan Injeksi SQL yang timbul dari penyalahgunaan set karakter multibyte , tapi di artikel lain di sini , skenario solusi ditampilkan yang menjelaskan bahwa injeksi masih dapat dilakukan.

Solusi:-

Jadi cara yang tepat dan lebih baik untuk mencegah injeksi SQL adalah dengan menggunakan pernyataan yang sudah disiapkan. Ini adalah teknik di mana pernyataan SQL dikompilasi sebelum penyisipan input pengguna (parameter) dan diperlakukan sebagai templat SQL yang dapat digunakan kembali. Jadi, ini memisahkan input pengguna dari SQL-Code yang sebenarnya dan SQL-parser tidak pernah mem-parsing input pengguna.

Selain keamanan, ini juga mengoptimalkan kueri SQL untuk kecepatan. Ini membantu jika Anda perlu menjalankan kueri yang sama beberapa kali dengan input pengguna yang berbeda.

Anda dapat merujuk ke manual PHP untuk detail implementasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Isi JFreechart TimeSeriesCollection dari Mysql DB?

  2. MySQL Hapus baris duplikat yang memiliki nilai kolom yang sama

  3. Mengubah Kolom di MySQL dari int menjadi double?

  4. Apa perbedaan antara SQL dan MySQL?

  5. Tab dinamis menyajikan catatan yang sama