Apa opsi "rahasia" sesi?


111

Saya tidak tahu apa-apa tentang kriptografi. Saya bertanya-tanya apa rahasia sesinya.

Saya melihat kode seperti ini:

app.use(express.session({
  store: mongoStore({
    url: app.set('db-uri')
  }),
  secret: 'topsecret'
}));

Apa rahasianya dan haruskah saya mengubahnya?

Jawaban:


83

Ya, Anda harus mengubahnya. Rahasia sesi dalam koneksi hanya digunakan untuk menghitung hash . Tanpa string, akses ke sesi pada dasarnya akan "ditolak". Lihat dokumen connect , yang akan membantu sedikit.


43
Anda tidak hanya dapat mengubahnya, tetapi Anda harus mengubahnya.
Michael Mior

1
@MichaelMior, seberapa sering?
FRD

9
@FRD Maksud saya adalah Anda tidak boleh menyimpan default seperti topsecret. Rahasianya harus berupa rangkaian karakter acak. Idealnya Anda juga akan mengubahnya secara berkala seandainya telah ditemukan. Namun, ini membutuhkan dukungan untuk rotasi rahasia sehingga Anda tidak langsung membatalkan sesi yang ada. Artinya, dua rahasia sesi harus dianggap valid secara bersamaan. Sepengetahuan saya, Express tidak mendukung rotasi rahasia saat ini.
Michael Mior

7
Sesi ekspres @MichaelMior sejak 1.11.0 mendukung rotasi rahasia. Dari dokumen: "Jika array rahasia disediakan, hanya elemen pertama yang akan digunakan untuk menandatangani cookie ID sesi, sementara semua elemen akan dipertimbangkan saat memverifikasi tanda tangan dalam permintaan." (Lihat expressjs / session # 127 untuk detailnya.)
Wolfgang

Apakah ini sama dengan cookie yang ditandatangani, jika ya .. apakah Anda perlu melakukan ini:res.cookie('name', 'value', {signed: true})
Muhammad Umer

22

Rahasianya digunakan untuk hash sesi dengan HMAC:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L256

Sesi ini kemudian dilindungi dari pembajakan sesi dengan memeriksa sidik jari terhadap hash dengan rahasia:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L281-L287


3
Bagaimana cara hash melindungi dari pembajakan sesi? Jika penyerang memiliki cookie sesi, bukankah mereka juga memiliki hash? Jika penyerang tidak memiliki cookie, lalu bagaimana hash rahasia membuatnya lebih sulit untuk ditebak (dibandingkan hanya memiliki ID sesi acak yang lebih panjang)?
Stuart P. Bentley

8
rahasianya adalah garam untuk hash, ini hanya mempersulit seseorang untuk: 1. mendekripsi cookie yang di-phishing, 2. memalsukan sesi dengan menyamar sebagai pengguna, karena mereka tidak memiliki rahasia (garam) mereka tidak bisa menghasilkan id sesi yang tepat.
mattdlockyer

7
Kedua tautan tersebut tidak valid karena ini adalah jawaban yang berusia 3 tahun.
trisis

5
@mattdlockyer Ini tidak melindungi Anda dari pembajakan sesi. Dan mengapa penyerang mencoba mendekripsi cookie? Jika penyerang memiliki cookie maka dia sudah memiliki akses penuh hingga sesi berakhir. Maksud saya ini tidak seperti orang menyimpan kata sandi pengguna mereka di cookie, itu akan konyol. Dan hal-hal seperti jwt harus dihindari.
Forivin

Tampaknya ada jawaban yang beragam mengenai tujuan rahasia sesi. Beberapa mengatakan itu melindungi dari pembajakan sesi sementara yang lain tidak setuju. Bisakah seseorang menjelaskan apa tujuan sebenarnya dari menghasilkan hash ini? Tepatnya, untuk apa itu menghitung hash?
nawK

-9

kunci rahasia pada dasarnya digunakan untuk mengenkripsi data dalam sesi


8
Tidak, tidak. Lihat jawaban yang diterima dari 6 tahun lalu.
Quentin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.