Tiada muat naik, 100% setempat, tiada akaun

Artikel

Enkod dan nyahkod data secara peribadi

Setiap hari pembangun menampal token, muatan dan bukti kelayakan ke dalam halaman pengekodan dan penyahkodan. Yang paling mudah berjalan pada pelayan, bermakna data anda meninggalkan mesin untuk tugas yang sebenarnya tidak pernah memerlukannya. Empat alat ini berjalan sepenuhnya dalam pelayar anda, jadi data kekal bersama anda.

Base64: nampak bercelaru, tetapi bukan rahsia

Base64 ialah pengekodan, bukan penyulitan. Ia menukar data binari kepada teks yang mampu bertahan apabila disalin dan ditampal atau dihantar melalui sistem yang hanya mengendalikan aksara mudah. Sesiapa yang melihat rentetan Base64 boleh menyahkodnya semula kepada asal dalam satu langkah, jadi rentetan yang mengandungi kunci API, sijil peribadi atau kandungan e-mel boleh dibaca sepenuhnya oleh sesiapa yang memegangnya. Risikonya, nilai itu sering tersembunyi dalam fail konfigurasi, data URL atau pengepala pengesahan dan kelihatan kabur, yang menggoda orang untuk menampalkannya ke penyahkod pertama yang ditemui dalam talian. Penyahkod itu menerima rahsia mentah. Alat yang menyahkod Base64 secara setempat menunjukkan bait asal kepada anda tanpa nilai itu sampai ke pelayan.

Hello! dikodkan menjadi SGVsbG8h dan dinyahkod semula, menunjukkan Base64 boleh dibalikkan oleh sesiapa sahaja tanpa kunci.

Pengekodan URL: rentetan pertanyaan membawa lebih daripada sangkaan anda

Pengekodan peratus membenarkan anda meletakkan ruang, tanda loghat dan aksara terpelihara ke dalam URL dengan selamat. Teks yang anda enkod atau nyahkod selalunya rentetan pertanyaan sebenar daripada sesebuah aplikasi, dan ia membawa pengecam sesi, istilah carian, alamat e-mel, sasaran ubah hala, dan kadangkala parameter bertandatangan. Menampal URL penuh ke pengekod jarak jauh menyerahkan kesemuanya kepada pihak ketiga sekali gus, dan rentetan pertanyaan ialah jenis nilai yang berakhir dalam log pelayan. Mengekod dan menyahkod dalam pelayar bermakna URL diproses dalam ingatan pada peranti anda sendiri dan tidak pernah dihantar semasa anda mengusahakannya.

JWT: muatan ditandatangani, bukan disembunyikan

Satu JSON Web Token terdiri daripada tiga bahagian Base64url yang dicantum dengan titik: pengepala, muatan dan tandatangan. Tandatangan membuktikan token tidak diusik, tetapi langsung tidak menyembunyikan muatan, yang dinyahkod menjadi JSON boleh baca yang mengandungi pengecam pengguna, peranan, masa luput dan apa-apa tuntutan tersuai yang ditambah oleh pengeluar. Token yang sah juga merupakan bukti kelayakan hidup: sehingga ia luput, sesiapa yang memegangnya boleh bertindak sebagai pengguna. Menampal token yang berfungsi ke penyahkod dalam talian menghantar bukti kelayakan aktif ke pelayan yang anda tidak kawal. Penyahkod yang menghurai token dalam pelayar anda mendedahkan pengepala dan muatan yang sama tanpa token itu pernah meninggalkan halaman.

Tiga bahagian JWT: header yang boleh dibaca, payload yang boleh dibaca, dan tandatangan yang membuktikan integriti tanpa menyembunyikan apa-apa.

Pencincangan: input lebih penting daripada digest

Fungsi cincang menukar sebarang input kepada digest berpanjang tetap, dan anda tidak boleh menyongsangkan digest semula kepada input. Sifat ini menjadikan pencincangan berguna untuk mengesahkan keutuhan fail atau membandingkan nilai tanpa menyimpan yang asal. Helahnya ada di sisi input: untuk mengira cincangan kata laluan, dokumen atau rahsia konfigurasi, anda perlu memberi alat itu nilai sebenar. Jika alat itu berjalan pada pelayan, input sensitif berpindah ke sana walaupun hanya digest tidak berbahaya dikembalikan. Mengira cincangan secara setempat mengekalkan input pada peranti anda, jadi anda mendapat digest yang diperlukan tanpa mendedahkan perkara yang anda cincang.

Pengekodan Base64: pemetaan bait dan pelapik

Base64 menterjemahkan bait 8-bit kepada aksara 6-bit dengan mengumpulkan tiga bait input (24 bit) kepada empat nilai 6-bit. Setiap nilai 6-bit dipetakan kepada aksara dalam abjad Base64 (A-Z, a-z, 0-9, +, /). Oleh sebab proses ini memerlukan input yang boleh dibahagikan kepada 24 bit, input pendek dilapik: satu bait berbaki menghasilkan dua aksara pelapik (==), dua bait berbaki menghasilkan satu (=). Varian Base64url, yang digunakan dalam JSON Web Tokens (JWT), menggantikan + dengan - dan / dengan _ untuk menjadikan rentetan selamat URL, dan membuang pelapik = sepenuhnya, kerana aksara pelapik boleh menyebabkan ralat dalam penghurai URI yang ketat. Mengenali perbezaan ini penting semasa menyahpepijat pengendalian token: JWT yang kelihatan cacat mungkin hanya dikodkan dalam Base64url dan bukan Base64 piawai.

Tandatangan JWT: HS256, RS256, dan kekeliruan algoritma

Keselamatan JSON Web Token bergantung sepenuhnya pada tandatangannya, segmen ketiga yang dipisahkan titik. Dengan HS256 (HMAC-SHA256), pelayan menandatangani pengepala dan muatan yang dikodkan Base64url menggunakan kunci rahsia. Fungsi hash SHA-256 memberikan rintangan perlanggaran: secara pengkomputeran adalah mustahil untuk menghasilkan muatan yang diubah suai yang menghasilkan hash yang sama tanpa mengetahui kunci rahsia. Dengan RS256, pelayan menandatangani menggunakan kunci peribadi RSA dan mengesahkan dengan kunci awam. Kerentanan yang dikenali sebagai kekeliruan algoritma timbul apabila pustaka pelayan tidak menguatkuasakan jenis algoritma yang dijangkakan dengan ketat. Penyerang boleh menukar medan alg pengepala token daripada RS256 kepada HS256 dan menandatangani token menggunakan kunci awam pelayan sebagai rahsia HMAC, kerana kunci awam sering boleh diakses. Penyahkodan pengepala JWT secara tempatan dalam pelayar membolehkan anda mengesahkan algoritma yang sebenarnya ditentukan, tanpa mendedahkan token aktif kepada sistem pengelogan pihak ketiga.

Alat dalam artikel ini

Soalan lazim

Adakah Base64 atau pengekodan URL satu bentuk keselamatan?

Tidak. Kedua-duanya pengekodan boleh balik yang direka untuk pengangkutan data yang selamat, bukan untuk melindunginya. Sesiapa yang boleh membaca rentetan terkod menyahkodnya serta-merta, tanpa kunci atau kata laluan. Jika anda perlu merahsiakan sesuatu nilai, sulitkannya dengan algoritma yang sesuai dan uruskan kunci secara berasingan. Anggap mana-mana nilai dalam Base64 atau terkod peratus seolah-olah ditulis dalam teks biasa.

Mengapa penting di mana saya menyahkod token atau mencincang kata laluan?

Kerana input ialah bahagian yang sensitif. JWT yang sah ialah bukti kelayakan hidup, dan kata laluan yang anda cincang ialah rahsia sebenar. Alat berasaskan pelayan menerima input mentah itu sebelum ia mengembalikan keputusan, bermakna satu salinan boleh dilog atau disimpan di tempat yang anda tidak nampak. Alat yang berjalan dalam pelayar anda melakukan operasi yang sama dalam ingatan pada mesin anda sendiri, jadi token atau kata laluan tidak pernah dihantar ke mana-mana.