Bài viết mới nhất

Tổng 2300 bài
Web 22/09/2026 6 phút

Xác thực HTTP: Basic, Bearer và API key — ai giữ bí mật, ai chỉ mã hoá kiểu Base64

Nhiều người tưởng Basic auth 'mã hoá' mật khẩu vì thấy chuỗi Base64 lạ mắt. Thực ra Base64 giải ngược được trong một lệnh. Bài này dựng server thật cho cả ba scheme — Basic, Bearer token, API key — đo bằng curl: thử thách 401 WWW-Authenticate, token bị sửa một ký tự thành invalid_token, và giải ngược Base64 lộ nguyên mật khẩu.

Web 22/09/2026 5 phút

Range request: cách tua video, tải tiếp file dở và tải song song hoạt động

Vì sao kéo thanh tua video nhảy ngay tới giữa phim mà không tải lại từ đầu? Vì sao tải file 2GB đứt mạng rồi nối tiếp được? Câu trả lời là Range request. Bài này dựng nginx thật phục vụ một file, đo bằng curl: 206 Partial Content, Content-Range, suffix range, lỗi 416, và ghép hai phần lại md5 khớp file gốc.

Web 22/09/2026 6 phút

WebSocket: HTTP nâng cấp thành kênh hai chiều — mổ xẻ cái bắt tay 101

WebSocket không phải một giao thức tách rời HTTP mà mọc lên TỪ HTTP: một request GET với header Upgrade, đáp lại là 101 Switching Protocols chứ không phải 200. Bài này tự dựng cả server lẫn client WebSocket bằng socket thuần, đo output thật: cách tính Sec-WebSocket-Accept từ key + GUID, và frame hai chiều mà frame từ client bắt buộc mask.

Web 22/09/2026 6 phút

Header bảo mật HTTP: HSTS, CSP, X-Frame-Options — mỗi dòng chặn một kiểu tấn công

Một dòng header có thể chặn cả một lớp tấn công. Bài này xem các header bảo mật THẬT mà chính blog này gửi, rồi dùng Chromium thật nhúng hai iframe — một trang có X-Frame-Options DENY, một không — để thấy trình duyệt thực sự từ chối hiển thị trang DENY: 'Refused to display ... X-Frame-Options to deny'. Không phải mô tả, là trình duyệt thi hành.

Bảo mật 22/09/2026 6 phút

JWT mổ xẻ: header.payload.signature — vì sao nó được KÝ chứ không MÃ HOÁ

Rất nhiều người tưởng JWT giấu kín dữ liệu vì thấy chuỗi dài loằng ngoằng. Thực ra payload chỉ là Base64URL — ai chặn được cũng giải ra đọc. Bài này tự dựng JWT bằng python hmac, đo output thật: giải ngược header/payload, xác minh chữ ký HMAC-SHA256, đổi role thành admin bị bắt vì chữ ký sai, và tấn công alg=none bị từ chối.

Bảo mật 22/09/2026 6 phút

ChaCha20-Poly1305: mã hoá dòng + xác thực trong một bước, và sự thật về tốc độ

ChaCha20-Poly1305 hay được giới thiệu là 'nhanh hơn AES' — nhưng đo thật trên máy có tăng tốc AES phần cứng thì AES-GCM lại nhanh gấp đôi. Bài này dựng demo thật bằng python cryptography: mã hoá AEAD sinh tag 16 byte, lật 1 bit ciphertext bị bắt ngay (InvalidTag), đổi AAD cũng bị bắt, và đo tốc độ trung thực trên CPU có lệnh AES.