Apabila membangunkan aplikasi web moden, salah satu kaedah pengesahan yang paling biasa ialah menggunakan JSON Web Token (JWT). JWT berkuasa, tetapi jika tidak dilaksanakan dengan selamat, ia boleh mendedahkan aplikasi anda kepada pelbagai risiko. Dalam blog ini, saya akan memecahkan perangkap biasa yang dihadapi oleh pembangun (PS: Saya juga menghadapinya..) dengan JWT dan amalan terbaik untuk memastikan keselamatan merentas aplikasi anda.
JWT ialah standard terbuka (RFC 7519) yang mentakrifkan cara untuk menghantar maklumat dengan selamat antara dua pihak sebagai objek JSON. Ia paling biasa digunakan untuk pengesahan dalam sistem tanpa kewarganegaraan.
JWT terdiri daripada tiga bahagian:
Teruskan dan lihat www.jwt.io
Walaupun kesederhanaan dan kuasanya, pelaksanaan JWT yang tidak betul boleh membawa kepada kelemahan keselamatan yang ketara, berikut ialah beberapa perangkap biasa yang saya hadapi & cara untuk menambah baik.
Pitfall: Ramai pembangun menyimpan JWT dalam storan tempatan kerana kesederhanaannya, tetapi pendekatan ini terdedah kepada serangan XSS (Cross-Site Scripting) iaitu penggodam boleh mencuri token itu dengan mudah melalui penyemak imbas anda dan boleh menimbulkan sebagai pengguna tulen.
Penyelesaian: Daripada storan setempat, simpan JWT dalam kuki HTTP sahaja. Kuki ini tidak boleh diakses oleh JavaScript, menjadikan kehidupan penggodam sedikit lebih sukar.
Pitfall: Jika JWT dicipta tanpa masa tamat tempoh, ia boleh digunakan selama-lamanya, walaupun selepas pengguna log keluar atau jika token telah terjejas.
Penyelesaian: Sentiasa tetapkan tuntutan tamat tempoh (exp) dalam muatan. Masa tamat tempoh yang munasabah memaksa pengguna untuk memuat semula token dengan kerap, mengurangkan tetingkap untuk kemungkinan penyalahgunaan token.
var token = jwt.sign({email_id:'123@gmail.com'}, "Stack", { expiresIn: '3d' // expires in 3 days });
Perangkap: Ini adalah kesilapan biasa yang saya masih cenderung untuk melupakannya, muatan JWT dikodkan base64 tetapi tidak disulitkan, maklumat sensitif (seperti kata laluan atau kunci rahsia) disimpan dalam muatan boleh dibaca dengan mudah oleh sesiapa sahaja tanpa kunci pun!
Penyelesaian: Sentiasa simpan hanya maklumat yang tidak sensitif dan tidak kritikal dalam muatan JWT, seperti peranan atau ID pengguna. Jika anda perlu menghantar data sensitif, sulitkan keseluruhan muatan token.
Perangkap: JWT bersifat tanpa kerakyatan, jadi membatalkan token (cth. selepas log keluar) boleh menjadi rumit. Oleh kerana tiada cara lalai untuk mengendalikan ini, kami memerlukan penyelesaian tersuai untuknya. Tanpa pembatalan yang sewajarnya, JWT kekal sah sehingga tamat tempoh, membenarkan berbilang JWT bagi setiap pengguna aktif pada satu masa.
Penyelesaian: Laksanakan senarai hitam token atau gunakan token muat semula. Simpan token dalam senarai hitam semasa log keluar, dan pastikan pelayan menyemak senarai hitam untuk setiap permintaan. Sebagai alternatif, gunakan token akses jangka pendek digabungkan dengan token muat semula untuk memaksa pengesahan semula dengan lebih kerap.
JWT ialah alat yang sangat baik untuk pengesahan tanpa kewarganegaraan, tetapi ia perlu dikendalikan dengan teliti untuk mengelak daripada memperkenalkan risiko keselamatan. Dengan mengelakkan perangkap biasa dan mengikuti amalan pengekodan terbaik, saya telah belajar untuk mencipta sistem pengesahan selamat dan menghadapi semua masalah ini sebagai seorang pemula.
Mengambil langkah ini bukan sahaja akan meningkatkan keselamatan aplikasi anda tetapi juga menunjukkan pemahaman mendalam anda tentang pengurusan token selamat—kemahiran yang sangat dicari dalam dunia pembangunan.
Atas ialah kandungan terperinci Mengendalikan Pengesahan JWT Dengan Selamat: Perangkap dan Amalan Terbaik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!