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

Apa cara teraman untuk menambahkan html/css/js ke mysql?

Ya, MySQL dapat menyimpan semua jenis teks secara teknis dengan aman. Artinya, MySQL akan menyimpan teks apa adanya dan akan mengembalikannya lagi tanpa kehilangan data apa pun.

Mysql tidak membedakan antara isi teks, jadi tidak ada bedanya apakah itu HTML, CSS, kode JS atau email terakhir teman Anda.

Namun jika Anda menampilkan teks nanti, Anda harus berhati-hati agar tidak ada injeksi kode yang tidak diinginkan setelah Anda menarik data dari mysql. Tapi sebenarnya itu tidak berhubungan dengan MySQL.

Untuk membuat sql Anda lebih aman, berikan pegangan database ke mysql_real_escape_string atau lebih baik gunakan MySQLi dan/atau PDO dan pernyataan yang disiapkan.

Kode Anda

Kode Anda sepertinya Anda berusaha keras untuk mencegah sesuatu, tetapi pada akhirnya ternyata sangat tidak berguna:

function filter($data) {
$data = trim(htmlentities(strip_tags($data)));

if (get_magic_quotes_gpc())
    $data = stripslashes($data);
    $data= strip_tags($data);

$data = mysql_real_escape_string($data);

return $data;}

Normalkan data sebelum Anda memprosesnya

Pertama-tama Anda harus mengubah posisi centang untuk get_magic_quotes_gpc untuk menormalkan data fungsi yang sedang bekerja. Akan lebih baik jika aplikasi Anda tidak bergantung padanya tetapi hanya menolak bekerja jika opsi itu diaktifkan - lihat informasi penting ini di sini tentang itu jika Anda peduli dengan keamanan.

Tetapi untuk keamanan kode Anda yang diposting, mari kita normalkan dulu nilai input ke fungsi sebelum memprosesnya lebih lanjut. Ini dilakukan dengan memindahkan tanda centang ke atas fungsi.

function filter($data)
{
   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes)
   {
     $data = stripslashes($data);
   }

   // normalize $data because of whitespace on beginning and end
   $data = trim($data);

   // strip tags
   $data = strip_tags($data);

   // replace characters with their HTML entitites
   $data = htmlentities($data);

   // mysql escape string    
   $data = mysql_real_escape_string($data);

   return $data;
 }

Dalam fungsi yang dimodifikasi ini, tanda kutip ajaib (yang tidak boleh Anda gunakan) telah dipindahkan ke atasnya. Ini memastikan bahwa terlepas dari opsi itu aktif atau nonaktif, data akan selalu diproses sama. Fungsi Anda tidak melakukannya, itu akan menciptakan hasil yang berbeda untuk data yang sama yang dikirimkan. Jadi ini sudah diperbaiki.

Lebih Banyak Masalah dengan fungsi Anda

Bahkan fungsinya terlihat lebih baik sekarang, masih memiliki banyak masalah. Misalnya, tidak jelas apa fungsi sebenarnya. Ia melakukan banyak hal sekaligus dan beberapa di antaranya kontradiktif:

  • Ini menghapus tag HTML yang merupakan tanda bahwa $data tidak boleh mengandung HTML
  • Tapi kemudian Anda mengonversi teks $data untuk benar-benar berisi entitas HTML.

Jadi datanya harus seperti apa? HTML atau tidak? Ini tidak memberikan keamanan lebih jika hal-hal menjadi tidak jelas karena ini akan menguntungkan bahwa kesalahan masuk ke program Anda dan pada akhirnya bahkan melewati tindakan pencegahan keamanan Anda.

Jadi, Anda sebaiknya membuang kode tersebut dan mempertimbangkan hal berikut:

  • Jika input ke aplikasi Anda tidak valid, jangan filter. Alih-alih mencegah penggunaan input yang tidak valid lebih lanjut. Jadi, Anda memerlukan fungsi untuk memvalidasi input sebelum Anda menggunakannya.
  • Jangan mengubah data hanya karena menurutmu ini mungkin membuat sesuatu lebih aman. Alih-alih mengubah dan menyandikan data di tempat yang diperlukan dan sesuai.
    • Buat aplikasi Anda hanya berfungsi dengan tanda kutip ajaib. Mengandalkan fitur ini sangat tidak disarankan. Dan kemudian tidak perlu memeriksanya di seluruh kode Anda.
    • Untuk menyimpan sesuatu dengan aman di dalam database, keluarkan data sebelum menggunakannya hanya dalam kueri. Tidak di tempat lain dari aplikasi Anda. Gunakan pernyataan yang Disiapkan untuk itu.
    • Tidak perlu mempermasalahkan data sebelum dimasukkan ke database jika valid. Tetapi Anda harus menyandikannya dengan benar saat menampilkannya ke halaman web . Dan hanya ada aplikasi yang tahu di mana pengkodean ini perlu. Anda tidak tahu itu ketika Anda memasukkan data ke dalam database.

Jadi jika Anda ingin membuat kode Anda lebih aman, ini bukan tentang membuang banyak fungsi ke beberapa data karena menurut Anda itu terkait dengan keamanan. Dengan demikian, Anda tidak membuat perangkat lunak Anda lebih aman tetapi kurang aman.

  1. Jangan pernah mempercayai data pengguna.
  2. Pastikan data dalam format yang Anda butuhkan diproses sebelumnya .
  3. Gunakan alat yang tepat untuk pekerjaan di tempat yang tepat.
  4. Jangan pernah menggunakan alat untuk menebak. Dapatkan pengetahuan sebagai gantinya, yang tidak hanya bermanfaat dari segi keamanan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL memuat data:Perintah ini belum didukung dalam protokol pernyataan yang disiapkan

  2. Peringkat MySQL dalam Kasus Ikatan

  3. Bagaimana Anda membuat pernyataan yang disiapkan dengan permata mysql2?

  4. JSON_ARRAY() – Buat Array JSON dari Daftar Nilai di MySQL

  5. Mengisi formulir html dengan data mysql menggunakan php muncul null