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

Fuzzing native trong Go (1.18+): để máy tự sinh input tìm bug

Test đơn vị chỉ phủ những input lập trình viên nghĩ tới. Fuzzing tự sinh hàng triệu input kỳ quái để tìm panic và ca biên — tích hợp thẳng vào go test từ Go 1.18. Đo thật: một hàm test thường XANH nhưng fuzz tìm ra input '0' làm panic trong dưới 1 giây, tự rút gọn tối giản và lưu làm hồi quy.

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

govulncheck trong Go: quét lỗ hổng theo cái code thực sự gọi tới

Scanner thường báo động mọi phụ thuộc dính CVE dù code không dùng hàm lỗi — ngập trong cảnh báo giả. govulncheck phân tích call graph, chỉ báo lỗ hổng code thực sự gọi tới, kèm đường dẫn gọi chính xác. Đo thật: 3 lỗ hổng yaml.v2 code gọi tới (kèm trace + phiên bản vá) so với 42 chỉ-có-không-gọi.

DevOps 22/09/2026 6 phút

Bảo mật container: vì sao container mặc định chạy root, và ba lớp phòng thủ giảm rủi ro

Mặc định container chạy dưới quyền root — kẻ khai thác được app là có root trong container. Bài này đo thật ba lớp phòng thủ: --user chạy non-root (ghi /etc bị Permission denied), --cap-drop ALL bỏ quyền đặc quyền (root cũng không chown được), và --read-only khoá rootfs (không ghi được binary). Phòng thủ theo lớp để một container bị chiếm không thành thảm hoạ.

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

ReDoS: vì sao một regex 6 ký tự có thể treo cả server của bạn

Mẫu (a+)+$ trông vô hại, nhưng gặp đúng input độc nó chạy chậm theo cấp số nhân. Bài này đo thật: với chuỗi 'aaaa...!', python re mất 9 giây chỉ với 28 ký tự, và thời gian gấp đôi mỗi khi thêm một 'a' — n=40 sẽ mất hàng ngàn năm. Cùng mẫu đó trên Go RE2 chỉ mất 3 micro-giây, kể cả với 100.000 ký tự. Đây là ReDoS, và cách phòng nó.

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

TLS handshake: cái giá thật của HTTPS đo được, và session resumption cắt nó ra sao

HTTPS an toàn nhưng không miễn phí: sau bắt tay TCP, TLS thêm một bắt tay riêng tốn CPU (toán khóa công khai) và một RTT. Bài này chạy thật trong Go với self-signed cert: TLS full handshake tốn 391µs so với TCP thường 23µs — thêm ~368µs, phần lớn là CPU. Session resumption (500/500 kết nối resumed) bỏ phần đắt; giải thích vì sao trên localhost nó chỉ nhanh 1,1 lần còn trên mạng thực tiết kiệm cả một RTT.

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

SQL injection: vì sao nối chuỗi làm lộ cả tài khoản admin, và prepared statement chặn triệt để

SQL injection vẫn nằm trong OWASP Top 10 sau hai thập kỷ, vì gốc rễ của nó đơn giản mà dễ mắc: trộn lẫn code và data. Bài này tái hiện thật trong lab PostgreSQL cô lập: một query đăng nhập nối chuỗi bị input ' OR '1'='1 biến điều kiện thành luôn-đúng, trả về 2 dòng (bypass đăng nhập, lộ cả admin); cùng input đó qua prepared statement trả 0 dòng — bị coi là chuỗi mật khẩu, không bao giờ thành SQL. Đây là kiến thức phòng thủ.