Bảo mật 02/09/2026 9 phút

Ở cùng 200 ms mỗi lần băm, bcrypt và argon2 làm kẻ tấn công chậm y như nhau trên CPU — khác biệt thật là 4 KB so với 512 MB RAM, gấp 131.072 lần

Lưu mật khẩu đúng cách nghĩa là không lưu mật khẩu. Tôi hiệu chỉnh bcrypt, scrypt, argon2 về cùng 200 ms/lần băm rồi đo: trên CPU cả ba làm kẻ tấn công chậm như nhau (5–6 lần đoán/giây), nên cấu hình đủ cao quan trọng hơn chọn thuật toán. Khác biệt thật lộ ra trên GPU/ASIC — argon2 dùng 512 MB RAM mỗi lần băm, vô hiệu hoá đúng lợi thế phần cứng của kẻ tấn công.

Bảo mật 02/09/2026 9 phút

bcrypt biến 4 ngày dò thành 3.800 năm — nhưng vẫn để lọt mật khẩu '123456' trong 51 giây: hai lớp khoá bảo vệ hai thứ khác nhau

Tôi dựng một cuộc tấn công từ điển thật vào mười bản băm và đo: mật khẩu yếu bị bẻ 6/10 dù dùng bcrypt, còn mật khẩu mạnh biến từ '4 ngày trên SHA256' thành '3.800 năm trên bcrypt'. Hai lớp phòng thủ — mật khẩu mạnh và thuật toán chậm — nhân nhau chứ không cộng, và thiếu một lớp là sụp về mức của lớp yếu hơn.

Bảo mật 02/09/2026 9 phút

Route đăng nhập không giới hạn = máy dò mật khẩu miễn phí: 2.600 lần thử trong 70 giây, và bốn cách bịt nó — cái nào cũng còn một khe hở

Một vòng lặp curl chạy chậm vẫn thử được 2.600 mật khẩu trong 70 giây khi route đăng nhập không chặn gì. Bốn chiến lược giới hạn kéo nó xuống 10, rồi 5 — nhưng mỗi cái mở ra một điểm mù riêng, trong đó có một khe hở biến chính lớp phòng thủ thành công cụ DoS.

Bảo mật 02/09/2026 9 phút

Mã TOTP sáu số của bạn không biết nó đang được gõ vào trang giả — và đó là lỗ hổng WebAuthn bịt bằng toán học

Tôi dựng TOTP thật rồi đo ba tính chất của nó: mã đổi mỗi 30 giây, cửa sổ chấp nhận ±31 giây, và tự nó KHÔNG chống phát lại. Nhưng điểm yếu chí mạng là phishing thời gian thực — thứ WebAuthn chặn được vì nó gắn chữ ký vào đúng tên miền. Hai công nghệ, hai triết lý.

Bảo mật 02/09/2026 9 phút

Không có PKCE, chỉ cần chặn được một mã là kẻ tấn công đổi được token của bạn — tôi đo đúng lỗ hổng đó trong 'Đăng nhập bằng Google'

Đo luồng authorization code của OAuth2: mã dùng một lần, redirect_uri khớp chính xác, và PKCE. Ba dòng cuối bảng đối xứng sáng tỏ — có PKCE thì chặn được mã vẫn vô dụng, không PKCE thì chặn được mã là chiếm được tài khoản. Vì sao authorization code + PKCE là luồng khuyến nghị cho MỌI ứng dụng.

Bảo mật 02/09/2026 9 phút

Đổi một con số trong URL, đọc thẻ tín dụng của người lạ — lỗ đứng đầu OWASP Top 10 chỉ là một câu if bị thiếu

IDOR: đăng nhập bằng tài khoản của mình, đổi /don/1 thành /don/2, và server ngoan ngoãn trả về đơn của người khác. Tôi đo lỗ này thật, và chứng minh vì sao id khó đoán (UUID) KHÔNG phải phân quyền — cách chặn duy nhất đúng là kiểm quyền sở hữu ở server.