MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Enkripsi bidang kata sandi di mongodb

Menurut percakapan di komentar, yang Anda maksud adalah hashing sandi, bukan mengenkripsi kata sandi. Anda biasanya akan melakukan ini dengan garam untuk mencegah serangan tabel pelangi. Menyimpan sandi sebagai hash asin adalah standar praktik terbaik dalam hal menyimpan sandi dalam database.

Pada versi 3.2, MongoDB tidak memiliki dukungan asli untuk hashing kata sandi seperti yang disediakan beberapa database SQL, jadi Anda harus mengimplementasikannya di Java.

Untuk membuat akun baru atau mengubah kata sandi akun yang ada:

  1. buat nilai garam acak yang aman secara kriptografis dengan java.security.SecureRandom . Kelas ini bekerja seperti generator angka acak standar java.util.Random (ini adalah subkelas) tetapi memperdagangkan kinerja untuk tingkat non-prediktabilitas yang jauh lebih tinggi yang diperlukan untuk konteks yang relevan dengan keamanan.
  2. Buat string dengan menggabungkan garam dan sandi
  3. Hasilkan hash dari string tersebut dengan fungsi hash yang aman secara kriptografis. Ada banyak fungsi hash yang disediakan oleh Java di luar kotak, tetapi Anda ingin menggunakan salah satu yang sengaja sulit dihitung untuk memperlambat penyerang dengan akses database yang mencoba memaksa hash Anda di cluster superkomputer lokal mereka. Kandidat yang baik adalah algoritme "PBKDF2WithHmacSHA1" yang didukung oleh javax.crypto.SecretKeyFactory kelas.
  4. Simpan dokumen ke MongoDB dengan kolom username , password_hash dan password_salt (ditambah data aplikasi Anda yang sebenarnya, tentu saja). Jangan simpan sandi asli.

Untuk mengambil akun:

  1. Baca username_input dan password_input pengguna yang diduga masuk ke formulir login Anda.
  2. Ambil dokumen tempat username cocok dengan username_input yang diberikan pengguna.
  3. Dapatkan password_salt bidang dari dokumen itu
  4. Buat string dengan menggabungkan password_salt dan password_input seperti yang Anda lakukan sebelumnya.
  5. Buat hash dari string tersebut dengan fungsi hash yang aman secara kriptografis yang sama.
  6. Bandingkan hash dengan password_hash bidang dokumen. Jika cocok, pengguna memasukkan sandi yang benar.

Sebagai alternatif, Anda hanya dapat mengambil bidang password_hash dan password_salt dari dokumen dan tidak memuat sisanya sebelum pengguna diautentikasi, tetapi saya akan berasumsi bahwa di dunia nyata itu akan menyebabkan lebih banyak beban daripada yang akan dihemat. Login yang berhasil biasanya akan jauh lebih banyak daripada yang gagal, kecuali jika Anda memiliki penyerang yang mencoba untuk memaksa akun. Dan dalam hal ini Anda akan memblokir penyerang dengan fail2ban atau mekanisme pembatasan login lainnya.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Android Studio:menghubungkan ke server MongoDB dengan Mongo Java Driver

  2. PHP:Apakah desain yang buruk untuk membuat serial objek dan memasukkannya ke dalam database untuk nanti?

  3. MongoDB - Memfilter konten dari Array internal di hasilset

  4. Menggunakan basis data spasial untuk menemukan poligon yang berisi titik

  5. Bagaimana cara melakukan kueri agregasi Mongo di Spring Data?