Tài liệu / Bảo mật

Bảo mật

Chuẩn bảo mật bắt buộc của PhoStack. Ngắn — vì mọi quy tắc ở đây đều không có ngoại lệ.

Cập nhật lần cuối: 29/07/2026


Thanh toán

  • Verify chữ ký trước mọi thứ. Payload IPN chưa verify là dữ liệu thù địch. So sánh hash bằng crypto.timingSafeEqual (chống timing attack) — xem vnpay.ts làm mẫu.
  • Đối chiếu số tiền. amountVnd từ IPN phải khớp với Order trong DB — không tin số tiền cổng báo để "cập nhật" đơn.
  • Idempotency theo gatewayTxnId — chống double-credit khi IPN retry.

Secret

  • Secret chỉ sống trong env, đọc qua src/lib/env.ts. Không hardcode, không log, không trả về client.
  • .env nằm trong .gitignore; chỉ commit .env.example với giá trị rỗng/placeholder.
  • AUTH_SECRET tối thiểu 16 ký tự (Zod enforce) — sinh bằng openssl rand -base64 32.

Auth & phân quyền

  • Password hash bằng bcrypt (bcryptjs), không bao giờ lưu plaintext.
  • Mọi query dữ liệu theo user phải scope theo session user id — chống IDOR. Không bao giờ nhận user id từ client làm khoá truy vấn dữ liệu nhạy cảm.
  • Route handler mutation kiểm tra session trước khi làm bất cứ gì.

Báo cáo lỗ hổng

Khách hàng phát hiện lỗ hổng: gửi hello@phostack.com — không mở GitHub Issue công khai. Sửa và phát hành trong chu kỳ update sớm nhất.