Menu
CoddyTech

Anahtar Baytlarını Karşılaştırma

Coddy'nin Node.js Journey'sinin Kimlik Doğrulama ve Güvenlik bölümünün bir parçası. Ders 5 / 24.

İki farklı Buffer nesnesi aynı baytları tutabilir. Bunları === ile karşılaştırmak, bayt içeriklerinin eşleşip eşleşmediğini değil, nesne kimliğini denetler. Gizli anahtarlar için timingSafeEqual kullan. İlk uyuşmazlıkta duran bayt bayt karşılaştırma, zamanlaması üzerinden bilgi sızdırabilir. Bu işlev sabit zamanlı bir bayt karşılaştırması kullanır; oturum açma kodunun geri kalanı da zamanlama sızıntılarını önlemelidir.

const same = token.length === savedToken.length
    && timingSafeEqual(token, savedToken);

Uzunluk denetimi önemlidir; çünkü farklı uzunluklar için timingSafeEqual hata verir. && ifadesi, uzunluklar farklı olduğunda karşılaştırmayı atlar. Başlangıç kodu, verilen onaltılık dizeleri senin için Buffer nesnelerine çözümler. Bir boole sonucu döndürmeye odaklan. Tam bir parola ile oturum açma işleminde önce denenmiş anahtar türetilir, ardından bu karşılaştırma yapılır.

challenge icon

Görev

Kolay

Bu küçük bir alıştırma projesidir. Kurulumu hazırdır; yalnızca exercise.js dosyasını düzenle.

Verilen ve beklenen değerler eşit baytlar içeriyorsa {"same":true}, aksi hâlde false döndür. {"given":"abcd","expected":"abcd"} değerini /result adresine POST etmek true döndürür. given değerini abce veya ab olarak değiştirmek, hata fırlatmadan false döndürür. Girdiler geçerli hex değerleridir.

Bayt uzunluklarını kontrol ettikten sonra içe aktarılan timingSafeEqual sonucunu kullan. Kodlanmış dizeleri veya Buffer kimliklerini karşılaştırmak, alıştırma konusu olan güvenli işlem değildir.

Kendin dene

import { timingSafeEqual } from 'node:crypto';
export function exercise(input) {
    const given = Buffer.from(input.given, 'hex');
    const expected = Buffer.from(input.expected, 'hex');
    return { same: given === expected };
}

Kimlik Doğrulama ve Güvenlik bölümündeki tüm dersler

Kendi başına pratik yap: Express playground