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

Menggunakan _id yang dihasilkan MongoDB sebagai data rahasia (misalnya, Token OAuth)

Singkatnya, tidak. Mongo ObjectIds mudah ditebak. Secara khusus, di bawah beban tinggi, ini sering berupa angka berurutan, karena stempel waktu, mesin, dan id proses tidak berubah. Jika Anda melihat struktur Objectid , mereka terdiri dari

a 4-byte timestamp, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value.

Oleh karena itu, mereka memiliki keacakan yang sangat kecil. Saya sering melihat id berurutan dalam database, misalnya jika beberapa tindakan pengontrol menulis objek domain, dan entri log secara berurutan.

Jika stempel waktu dapat ditebak dan id mesin dapat ditentukan (kecuali jika Anda memiliki kluster besar), hanya tersisa lima byte. Dengan melihat sejumlah id yang dihasilkan, saya mungkin dapat menguranginya menjadi seperti 50 proses sehingga entropi efektif ada di suatu tempat dalam kisaran 28 bit. Ini masih sulit ditebak, tetapi terlalu berisiko untuk token akses.

Gunakan generator nomor acak semu yang kuat secara kriptografis dan buat token dari itu. Misalnya, di .NET, RNGCryptoServiceProvider memungkinkan untuk membuat data acak panjang sewenang-wenang.

Sebagai catatan tambahan, saya menyarankan untuk memiliki pembungkus kriptografi tambahan di sekitar OAuthTokens Anda, karena dua alasan:

a) Anda ingin dapat menentukan token yang tidak valid dengan cepat. Shell kriptografis yang valid mungkin masih menyertakan token yang tidak valid (hibah yang dicabut atau kedaluwarsa), tetapi Anda tidak perlu menekan basis data pada serangan brute force setiap saat. Juga, klien

b) Klien dapat meminta token berulang kali. Meskipun ini bukan persyaratan, hampir semua sistem yang saya tahu mengembalikan token yang berbeda setiap saat (tidak peduli apakah mereka memvalidasi sendiri atau tidak). Biasanya, itu karena token itu sendiri memiliki masa berlaku yang terbatas. Itu bukan periode validitas yang sama dengan hibah OAuth.

Dalam database, yang benar-benar ingin Anda simpan adalah hibah, yaitu izin yang diberikan oleh beberapa pengguna kepada beberapa klien. Jika hibah ini dihapus, semua token menjadi tidak valid. Memasukkan token baru setiap saat sangat tidak praktis karena pengguna harus menghapus semuanya untuk menghapus hibah aplikasi secara efektif.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengaktifkan elemen dalam array di mongoDB

  2. cara mengonversi array menjadi objek di MongoDB

  3. MongoDB dan Mongoose:Array Bersarang dari ID Referensi Dokumen

  4. Bagaimana cara mengonversi dari string ke tipe data tanggal?

  5. Agregasi Mongodb berdasarkan hari berdasarkan cap waktu unix