Yükleme yok, %100 yerel, hesap yok

Makale

Verileri gizlice kodlama ve çözme

Geliştiriciler her gün kodlama ve çözme sayfalarına belirteçler, yükler ve kimlik bilgileri yapıştırır. En kullanışlı olanlar bir sunucuda çalışır; bu da verilerinizin, hiç gerekmediği halde bir iş için cihazınızdan ayrıldığı anlamına gelir. Bu dört araç tamamen tarayıcınızda çalışır, dolayısıyla veriler sizde kalır.

Base64: karışık görünür ama gizli değildir

Base64 bir kodlamadır, şifreleme değildir. İkili verileri, kopyala yapıştır işlemine ya da yalnızca basit karakter işleyen sistemlerden geçişe dayanabilen metne dönüştürür. Base64 dizesini gören herkes onu tek adımda özgün haline geri çözebilir, bu yüzden bir API anahtarı, özel bir sertifika ya da bir e-postanın gövdesini içeren dize, onu elinde tutan için tamamen okunabilir. Risk şu: bu değer çoğu kez yapılandırma dosyalarında, data URL'lerinde ya da kimlik doğrulama başlıklarında saklanır ve anlaşılmaz görünür; bu da insanı çevrimiçi bulduğu ilk çözücüye yapıştırmaya kışkırtır. O çözücü ham sırrı alır. Base64'ü yerel olarak çözen bir araç, değer hiçbir sunucuya ulaşmadan size özgün baytları gösterir.

Hello! metninin SGVsbG8h olarak kodlanıp tekrar çözülmesi, Base64'ün anahtar olmadan herkes tarafından geri çevrilebildiğini gösteriyor.

URL kodlama: sorgu dizeleri sandığınızdan fazlasını taşır

Yüzde kodlama, bir URL'ye boşlukları, aksanları ve ayrılmış karakterleri güvenle koymanızı sağlar. Kodladığınız ya da çözdüğünüz metin sıklıkla bir uygulamadan gelen gerçek bir sorgu dizesidir ve bunlar oturum kimlikleri, arama terimleri, e-posta adresleri, yönlendirme hedefleri ve bazen imzalı parametreler taşır. Tam bir URL'yi uzaktaki bir kodlayıcıya yapıştırmak tüm bunları tek seferde bir üçüncü tarafa teslim eder ve sorgu dizeleri tam da sunucu günlüklerine düşen türden değerlerdir. Tarayıcıda kodlamak ve çözmek, URL'nin kendi cihazınızın belleğinde işlendiği ve üzerinde çalışırken asla iletilmediği anlamına gelir.

JWT: yük imzalanmıştır, gizlenmemiştir

Bir JSON Web Token, noktalarla birleştirilmiş üç Base64url bölümünden oluşur: bir başlık, bir yük ve bir imza. İmza, belirtecin kurcalanmadığını kanıtlar ama yükü hiçbir biçimde gizlemez; yük, kullanıcı kimliklerini, rolleri, son kullanma zamanlarını ve verenin eklediği her özel hak iddiasını içeren okunabilir JSON'a çözülür. Geçerli bir belirteç aynı zamanda canlı bir kimlik bilgisidir: süresi dolana dek onu elinde tutan herkes kullanıcı adına hareket edebilir. Çalışan bir belirteci çevrimiçi bir çözücüye yapıştırmak, denetlemediğiniz bir sunucuya etkin bir kimlik bilgisi gönderir. Belirteci tarayıcınızda ayrıştıran bir çözücü, o belirteç sayfadan asla ayrılmadan aynı başlığı ve yükü gösterir.

Bir JWT'nin üç parçası: okunabilir başlık, okunabilir payload ve hiçbir şeyi gizlemeden bütünlüğü kanıtlayan bir imza.

Özetleme: girdi özetten daha önemlidir

Bir özet işlevi herhangi bir girdiyi sabit uzunlukta bir özete dönüştürür ve özeti geri çevirip girdiye ulaşamazsınız. Bu özellik, özetlemeyi bir dosyanın bütünlüğünü doğrulamak ya da özgününü saklamadan değerleri karşılaştırmak için yararlı kılar. İşin püf noktası girdi tarafındadır: bir parolanın, bir belgenin ya da bir yapılandırma sırrının özetini hesaplamak için araca gerçek değeri vermeniz gerekir. Bu araç bir sunucuda çalışıyorsa, yalnızca zararsız özet geri dönse de hassas girdi oraya gider. Özeti yerel olarak hesaplamak girdiyi cihazınızda tutar, böylece özetlediğiniz şeyi açığa vurmadan ihtiyacınız olan özeti alırsınız.

Base64 kodlama: bayt eşleme ve dolgu

Base64, 8 bitlik baytları üç giriş baytını (24 bit) dört 6 bitlik değere gruplayarak 6 bitlik karakterlere çevirir. Her 6 bitlik değer, Base64 alfabesindeki bir karakterle eşleşir (A-Z, a-z, 0-9, +, /). İşlem 24 bite bölünebilen girdiler gerektirdiğinden kısa girdilere dolgu eklenir: kalan bir bayt iki dolgu karakteri (==), kalan iki bayt ise bir dolgu karakteri (=) üretir. JSON Web Token'larında (JWT) kullanılan Base64url varyantı, + yerine - ve / yerine _ kullanarak dizeyi URL açısından güvenli kılar; katı URI ayrıştırıcılarda sorun yaratabileceği için = dolgu karakterini tamamen çıkarır. Bu farkı tanımak, token işleme sorunlarını ayıklarken önemlidir: hatalı görünen bir JWT, standart Base64 yerine Base64url ile kodlanmış olabilir.

JWT imzaları: HS256, RS256 ve algoritma karışıklığı

Bir JSON Web Token'ın güvenliği tamamen imzasına, yani nokta ile ayrılmış üçüncü bölümüne bağlıdır. HS256 (HMAC-SHA256) ile sunucu, Base64url ile kodlanmış başlığı ve yükü gizli bir anahtar kullanarak imzalar. SHA-256 karma işlevi çarpışma direnci sağlar: gizli anahtarı bilmeden aynı imzayı üretecek değiştirilmiş bir yük üretmek hesaplama açısından olanaksızdır. RS256'da sunucu, RSA özel anahtarıyla imzalar ve ortak anahtarla doğrular. Algoritma karışıklığı adı verilen bilinen bir güvenlik açığı, bir sunucu kitaplığı beklenen algoritma türünü katı biçimde uygulamadığında ortaya çıkar. Saldırgan, token başlığındaki alg alanını RS256'dan HS256'ya değiştirebilir ve ortak anahtarlar çoğunlukla erişilebilir olduğu için sunucunun ortak anahtarını HMAC gizli anahtarı olarak kullanarak token'ı imzalayabilir. JWT başlığını tarayıcıda yerel olarak çözümlemek, aktif token'ı üçüncü taraf günlükleme sistemlerine göndermeden hangi algoritmanın gerçekte belirtildiğini doğrulamanıza olanak tanır.

Bu makaledeki araçlar

Sıkça sorulan sorular

Base64 ya da URL kodlama bir güvenlik biçimi midir?

Hayır. İkisi de verileri korumak için değil, güvenli taşımak için tasarlanmış tersine çevrilebilir kodlamalardır. Kodlanmış dizeyi okuyabilen herkes onu anahtarsız ya da parolasız anında çözer. Bir değeri gizli tutmanız gerekiyorsa onu uygun bir algoritmayla şifreleyin ve anahtarı ayrı yönetin. Base64 ya da yüzde kodlanmış her değeri düz metinle yazılmış gibi değerlendirin.

Bir belirteci nerede çözdüğüm ya da bir parolanın özetini nerede aldığım neden önemli?

Çünkü hassas kısım girdidir. Geçerli bir JWT canlı bir kimlik bilgisidir ve özetini aldığınız parola gerçek sırdır. Sunucu tabanlı bir araç, bir sonuç döndürmeden önce o ham girdiyi alır; bu da bir kopyanın günlüğe yazılabileceği ya da göremediğiniz bir yerde tutulabileceği anlamına gelir. Tarayıcınızda çalışan bir araç aynı işlemi kendi cihazınızın belleğinde yapar, dolayısıyla belirteç ya da parola hiçbir yere gönderilmez.