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

Enkripsi saat istirahat dan/atau AES_ENCRYPT

Enkripsi saat istirahat

Enkripsi saat istirahat adalah data dalam database saat tidak digunakan/diakses atau diperbarui. Enkripsi saat bepergian adalah hal-hal seperti TLS dimana datanya (dari database ) diangkut dari server ke server ke browser, ke server, ke browser, dll. TLS sangat baik di sebagian besar situasi jika ditangani dengan hati-hati dan didekati dengan sikap bahwa Anda perlu melakukan lebih dari yang minimal untuk membuatnya benar-benar aman.

Contoh tipikal adalah orang-orang memakai sertifikat TLS dari LetsEncrypt di domain mereka dan berpikir bahwa tiba-tiba semua barang mereka aman; tetapi mereka tidak mengenkripsi sesi atau cookie mereka sehingga meninggalkan potensi lubang besar di pertahanan mereka.

Jangan gunakan sistem enkripsi bawaan MySQL.

Saya tidak bisa cukup menekankan ini; sistem enkripsi bawaan di MySQL tidak cocok untuk perlindungan data aman yang sebenarnya.

Silakan baca jawaban saya untuk pertanyaan yang sangat mirip di sini mengenai detailnya (Saya tidak ingin sekadar menyalin/menempel ).

Oke, kalau begitu, karena Anda bersikeras .... di sini:

Dari apa yang saya baca dalam penelitian saya sendiri tentang topik ini, tautan yang disediakan oleh Magnus ke defuse/php -enkripsi adalah salah satu cara terbaik untuk mencegah MySQL menyebabkan Anda mengkompromikan data Anda, dengan tidak pernah membiarkan program/server MySQL melihat nilai teks biasa dari data Anda.

-- Jawaban seperti yang diposting pada 7 Mei 2017.

Juga Jawaban Bill Karwin untuk pertanyaan yang sama memberikan beberapa wawasan tambahan yang berharga:

-- Jawaban seperti yang diposting pada 7 Mei 2017.

Titik Penutupan:

Keamanan itu kompleks. Jika Anda ingin melakukannya dengan benar dan yakin dengan kulit bawang pelindung Anda, maka Anda perlu melakukan banyak hal (lihat butir di bawah); tetapi hal pertama yang perlu Anda lakukan adalah:

  • Tentukan Siapa yang Anda lindungi

Dengan serius. Anda memerlukan strategi berbeda melawan seseorang yang ingin mencuri nama dan alamat plaintext Anda versus seseorang yang ingin mengambil alih server Anda versus seseorang yang hanya ingin membuang data hanya karena. Ini adalah mitos bahwa Anda dapat melindungi dari semua orang sepanjang waktu, menurut konsep ini tidak mungkin*; jadi Anda perlu menentukan penyerang yang paling mungkin dan kemudian mencari cara terbaik untuk mengurangi kemajuan mereka.

Khusus untuk MySQL, beberapa rekomendasi yang jelas:

  • Simpan SQL dan PHP di server yang sama. Jangan akses jarak jauh ke data MySQL.

  • Kecualikan akses eksternal ke SQL (jadi localhost saja)

  • Mengaburkan nama tabel dan nama kolom Anda; jika seseorang membobol data Anda dan Anda memiliki HDTBJ^BTUETHNUYT di bawah kolom username kemudian mereka tahu bahwa garble ini mungkin adalah nama pengguna sehingga mereka memiliki awal yang baik untuk mencoba memecahkan enkripsi Anda.

  • PENTING :Benar-benar mengunci akses meja Anda; mengatur banyak pengguna MySQL, masing-masing hanya dengan hak istimewa minimum untuk melakukan apa yang mereka butuhkan; Anda ingin pengguna membaca tabel (hanya ) dan hanya membaca tabel tertentu; pengguna untuk menulis ke tabel tertentu tetapi tidak memiliki akses ke tabel lain. Ini pemisahan perhatian sehingga jika salah satu pengguna di MySQL dikompromikan; Anda tidak secara otomatis kehilangan setiap bagian data di sana.

  • Gunakan layanan enkripsi PHP . Simpan kunci Enkripsi di tempat yang benar-benar terpisah; misalnya memiliki server lain yang Anda gunakan hanya untuk cadangan yang dapat Anda akses hanya untuk menjangkau untuk mengambil kunci enkripsi, oleh karena itu jika server PHP/MySQL Anda disusupi, Anda memiliki ruang untuk memotong dan mengunci server Kunci sehingga Anda bisa membatasi kerusakan. Jika server kunci juga memiliki cadangan maka sebenarnya Anda tidak terlalu dikompromikan (tergantung situasi ).

  • Siapkan banyak pengamat dan pemberi informasi email untuk memberi tahu Anda dengan tepat kapan proses tertentu sedang berjalan dan pengguna server mana (bukan orang tetapi program) yang melakukan apa. Jadi Anda dapat melihat mengapa proses tak terduga mulai berjalan pada jam 5 pagi untuk mencoba dan mengukur ukuran tabel MySQL. WTF?

  • Ada banyak potensi untuk membuat data MySQL AES_ENCRYPT Anda "mengendus" bahkan jika tidak diam di DB, tetapi jika situs web dikompromikan (atau lebih buruk, kode PHP tidak aman) maka serangan waktu dapat berhasil isi data dengan menghitung waktu pencarian kueri dan pengembalian paket data.

  • Keamanan adalah lubang hitam; di beberapa titik atau lain Anda akan berpikir "Ambil ini, saya sudah melakukan cukup". Tidak ada yang pernah memiliki keamanan total, beberapa organisasi yang sangat berdedikasi memiliki cukup keamanan. Anda perlu mengetahui seberapa jauh Anda bersedia berjalan sebelum Anda pergi jauh.

* Mengapa tidak mungkin? Karena untuk melindungi data Anda dari semua ancaman, setiap saat, data tersebut harus tidak dapat dibaca, tidak dapat digunakan, seperti hash. Sebuah hash dilindungi dari semua orang, sepanjang waktu. Tapi hash tidak akan pernah bisa un-hash.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menambahkan kunci asing saat membuat tabel baru?

  2. Bagaimana Membandingkan Dua Kolom di MySQL

  3. MySQL menonaktifkan semua pemicu

  4. Temukan semua kolom yang hanya memiliki nilai nol, di tabel MySQL

  5. Formulir PHP tidak mengunggah file