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

Perlindungan Injeksi SQL

Ini bukan apa itu SQL Injection. Setiap kali Anda menggunakan parameter yang belum disanitasi dalam kueri SQL, Anda membiarkan database terbuka untuk injeksi SQL, yang mungkin tidak selalu bertujuan untuk menghancurkan data. Bisa juga untuk mencuri data atau mendapatkan akses tidak sah.

Pertimbangkan akun yang sangat terbatas di mana yang bisa dilakukannya hanyalah SELECT . Anda menulis kueri untuk otentikasi:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

Dengan input normal, Anda mengharapkan kueri terlihat seperti:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

Yang harus mengembalikan 1 sebagai hitungan jika nama pengguna dan pass cocok. Sekarang penyerang mencoba masuk sebagai admin. Karena Anda belum membersihkan input Anda, mereka mengirim $_POST['user'] sebagai:admin'; -- . Seluruh kueri menjadi:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

Semuanya setelah -- adalah komentar, jadi ini mengabaikan kondisi lain dan mengembalikan 1 terlepas. Ini dia, Anda baru saja memberikan akses admin pengguna yang jahat. Begitulah cara beberapa serangan nyata dilakukan. Anda mulai dengan akun dengan hak istimewa rendah dan melalui celah keamanan Anda mencoba mendapatkan akses ke lebih banyak hak istimewa.

Singkat cerita, memiliki akun seluruh aplikasi dengan hak istimewa terbatas (mis:tanpa DROP , ALTER , dll) baik. Jangan pernah memberi siapa pun atau aplikasi apa pun hak istimewa lebih dari yang mereka butuhkan. Tetapi untuk mencegah injeksi SQL, gunakan pernyataan yang disiapkan .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan ID Peningkatan Otomatis ke tabel yang ada?

  2. Masukan kata sandi MySQL dalam skrip bash

  3. apakah ada fungsi group_concat di ms-access?

  4. Golang RESTful API load testing menyebabkan terlalu banyak koneksi database

  5. Tidak dapat menggunakan kumpulan karakter utf8mb4 dengan CloudSQL di AppEngine Python