Parola saklama: bcrypt, scrypt veya Argon2 ile hash'le
Düz metin parolalardan oluşan bir veritabanı, insanlar parolalarını tekrar kullandığı için başka sitelerin giriş bilgilerinin listesidir. Tabloyu okuyan kişi — bir yedek, bir injection veya bir içeriden kişi aracılığıyla — hepsini alır.
Örnek
this.addUser = (userName, password, callback) => {
users.insertOne({ userName, password }, callback);
};const bcrypt = require("bcrypt");
this.addUser = async (userName, password) => {
const hash = await bcrypt.hash(password, 12);
return users.insertOne({ userName, password: hash });
};
// at login: await bcrypt.compare(attempt, user.password)Nasıl ters gider
Doğrudan users tablosuna yazılan parolalar bariz durumdur. Hızlı hash'ler ise ince olanıdır: MD5, SHA-1 ve düz SHA-256 bir GPU'da saniyede milyarlarca kez hesaplanabilir; sızan bir tablo günler içinde kırılır. Tuzsuz hash'ler ayrıca önceden hesaplanmış tek bir tablonun tüm kullanıcıları kapsamasına izin verir.
Nasıl düzeltilir
Yavaş, tuzlu bir parola hash'i ve kütüphanenin doğrulama fonksiyonunu kullan.
- bcrypt (maliyet 12 veya üzeri), scrypt veya Argon2id
- String karşılaştırarak değil, kütüphanenin sabit zamanlı karşılaştırmasıyla doğrula
- Maliyeti artırdığında girişte yeniden hash'le
- Giriş denemelerini sınırla ve kullanıcı adının var olup olmadığını belli etme
RepoVerse bunu nasıl bulur
- YüksekParola hash'lenmeden saklanıyor
Veritabanını okuyabilen herkes — bir yedek, bir injection, bir içeriden kişi — tüm kullanıcıların parolalarını, onlarla da diğer sitelerdeki hesaplarını ele geçirir.
veri akışı · CWE-256
- OrtaParola veya token kırılmış bir özetle hash'lenmiş
MD5 ve SHA-1 hızlıdır ve çakışmaya açıktır; bir secret için tam olarak yanlış olan şey budur — sıradan bir GPU çalınmış tabloyu gezer.
örüntü
Sorular
- Tuzlu SHA-256 parolalar için yeterli mi?
- Hayır. Tuz önceden hesaplanmış tabloları durdurur ama SHA-256 hızlı olacak şekilde tasarlanmıştır; parola kıran bir saldırganın istediği de budur. Parola hash'leri bilerek yavaş ve ayarlanabilirdir.
- RepoVerse düz metin parolaları nasıl tespit ediyor?
- Yakınında hiçbir hash çağrısı ve modelde kaydetme öncesi hash'leme kancası olmadan insert, save veya create çağrılarıyla veritabanına yazılan parola alanlarını arar.
İlgili
- Koda gömülü secret'lar: kodda, commit'lerde ve paketlerde API anahtarlarıRepoya eklenmiş veya sitenin JavaScript'inde açıkta kalan API anahtarlarını ve token'ları bul (CWE-798); dosyayı silmek neden yetmez, nasıl yenilenir.
- Güvenli oturum cookie'leri: bayraklar ve giriş adımıOturum cookie'lerini güvenle ayarla: Secure, HttpOnly ve SameSite bayrakları (CWE-614, CWE-1004), session fixation'a karşı girişte oturumu yenileme, Express örnekleriyle.
- NoSQL injection: MongoDB sorgularını istekten yeniden yazmakMongoDB $where ifadeleri ve {"$ne": null} gibi operatörler istek verisinin sorguyu yeniden yazmasına nasıl izin verir (CWE-943); örnekler ve çözüm.
Güncellendi 2026-10-11