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

Variabel pengguna aman PHP

Ada dua hal penting yang harus Anda lakukan untuk menghindari masalah keamanan yang serius.

  1. Anda harus keluar dari input pengguna sebelum memasukkannya ke dalam kueri SQL Anda. Melarikan diri berarti keluar dari semua karakter khusus seperti '; untungnya, ada fungsi yang sudah melakukannya secara otomatis:mysql_real_escape_string .

    Jika Anda tidak lolos dari input pengguna, hal-hal buruk bisa terjadi. Bayangkan kueri Anda adalah INSERT INTO userdata VALUES ('$user_data') . Sekarang bayangkan pengguna menulis '; DROP DATABASE userdata; .

    Jika Anda tidak menghindarinya, kueri Anda akan menjadi:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Seperti yang dapat Anda bayangkan, ini tidak baik:jika Anda mengaktifkan multi pernyataan, Anda dapat mengucapkan selamat tinggal pada database Anda. Ini disebut SQL Injection menyerang.

  2. Saat Anda mengeluarkan variabel Anda ke pengguna, Anda juga perlu mengganti karakter khusus HTML dengan benar dengan entitas HTML. Untungnya, ada fungsi untuk melakukannya juga:htmlspecialchars() . Ini akan mengubah karakter HTML khusus seperti < ke < .

    Hal ini tampaknya menjadi masalah yang sering diremehkan, namun pada kenyataannya sangat serius. Bayangkan jika $user_data berisi <script>SomeNastyScript()</script> . Itu bisa mengeksploitasi kerentanan yang ada di browser pengguna Anda, atau bisa mengirim cookie non-HTTPOnly (yang mungkin berisi kata sandi yang disimpan) ke penyerang, atau itu bisa menipu pengguna untuk menulis kata sandi mereka pada formulir yang dihasilkan melalui manipulasi DOM (mungkin dalam javascript), atau banyak hal buruk lainnya.

    Ini disebut XSS (Skrip lintas situs).

Versi pendek

  1. Panggil mysql_real_escape_string pada string sebelum memasukkannya ke dalam kueri SQL Anda (tetapi tidak saat Anda echo itu).

  2. Panggil htmlspecialchars pada string sebelum menampilkannya kepada pengguna (tetapi tidak saat Anda memasukkannya ke dalam database).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan saat menggunakan mysql_real_escape_string()

  2. fetchAll fungsi pembantu menggunakan PDO

  3. Adakah yang menemukan bahwa REGEX \b tidak berfungsi di MYSQL?

  4. Bagaimana cara menghindari kata-kata yang dicadangkan yang digunakan sebagai nama kolom? MySQL/Buat Tabel

  5. SQLSTATE[HY000] [2002] Tidak ada file atau direktori seperti itu