Lập trình 22/09/2026 6 phút

Brute-force và rate limiting: biến thời gian dò mật khẩu từ 15 giờ thành 380.000 năm

Một endpoint đăng nhập không giới hạn số lần thử là lời mời brute-force: kẻ tấn công cứ thử mật khẩu đến khi trúng. Bài này đo thật trong Go: không giới hạn, kẻ tấn công thử 18 triệu lần/giây (dò hết không gian 10^12 trong 15 giờ); thêm rate limit 5 lần sai/phút, 99.995/100.000 request bị chặn và thời gian brute-force vọt lên 380.000 năm. Kèm các đánh đổi: DoS khoá tài khoản, IP chung, và vì sao CAPTCHA/MFA mạnh hơn.

Lập trình 22/09/2026 6 phút

TLS/HTTPS: InsecureSkipVerify biến HTTPS thành vô dụng — mã hoá mà không xác thực là vô nghĩa

HTTPS làm hai việc: mã hoá dữ liệu VÀ xác thực bạn đang nói chuyện với đúng server. Tắt phần xác thực (InsecureSkipVerify) giữ lại mã hoá nhưng vứt bỏ sự an toàn. Bài này tái hiện thật trong Go: client mặc định từ chối cert tự ký với lỗi x509, nhưng InsecureSkipVerify=true chấp nhận bất kỳ cert nào — mở cửa cho kẻ người-đứng-giữa. Cách đúng khi cần tin cert riêng là thêm vào RootCAs, không bao giờ tắt verify.

Lập trình 22/09/2026 6 phút

Quản lý bí mật: đừng hardcode, đừng log secret — và một kiểu Secret tự che trong Go

Hai cách rò rỉ bí mật phổ biến nhất không phải do bị hack: hardcode secret vào code (lộ qua git) và vô tình in secret ra log/error/JSON. Bài này đo thật trong Go: một config với mật khẩu kiểu string thường lộ nguyên trong cả log và JSON; một kiểu Secret tự che (override String/MarshalJSON) in ra *** ở mọi nơi nhưng code vẫn dùng được giá trị thật qua Reveal(). Mặc định an toàn thay vì nhớ che từng chỗ.

Lập trình 22/09/2026 9 phút

Broken Access Control: lỗ hổng #1 OWASP và IDOR — vì sao server biết bạn là ai nhưng vẫn để bạn đọc dữ liệu người khác

Đăng nhập xong không có nghĩa được làm mọi thứ. Broken Access Control đứng #1 OWASP Top 10 vì rất dễ dính: server xác thực đúng bạn là ai, nhưng quên kiểm bạn có quyền với ĐỐI TƯỢNG này không. Bài này tái hiện IDOR trong lab cô lập: Alice chỉ đổi một số id trong URL là đọc được đơn hàng nhạy cảm của Bob (HTTP 200); thêm một dòng kiểm sở hữu phía server, cùng request đó trả về 403. Phòng thủ, không tấn công.

Lập trình 22/09/2026 8 phút

Tổng kết sê-ri Bảo mật web: ánh xạ 11 lỗ hổng vào OWASP Top 10, checklist production và cây quyết định review

Mười một bài, mười một lỗ hổng tái hiện trong lab — giờ ghép lại thành một bản đồ dùng được. Bài tổng kết này ánh xạ từng lỗ hổng vào OWASP Top 10:2021 để bạn thấy bức tranh rủi ro, kèm một checklist chạy trước khi lên production và một cây quyết định dán cạnh màn hình khi review code: input vào SQL thì prepared statement, ra HTML thì escape, là id đối tượng thì kiểm sở hữu. Phòng thủ, không tấn công.

Lập trình 22/09/2026 7 phút

Kafka cho backend từ con số 0: vì sao nó là cuốn sổ ghi, không phải hàng đợi — và nửa triệu message/giây trên một node

Nhiều người tưởng Kafka là một message queue nhanh hơn. Hiểu vậy là bỏ lỡ điểm cốt lõi: Kafka là một append-only log — message không bị xoá sau khi đọc, nhiều consumer đọc độc lập, và đọc lại được từ đầu. Bài mở màn sê-ri dựng broker KRaft single-node thật trong Docker, produce/consume, chứng minh log không mất bằng cách consume hai lần, và đo throughput thật: 527.983 bản ghi/giây (50 MB/giây) trên đúng một node.