Ebig
Liên hệ tư vấn
Dành cho CTO — cái gì đã chạy thật, cái gì đang ở lộ trình, nói rõ ràng cả hai

Bảo mật của Ebig, đúng những gì trong mã đang thi hành — không tô hồng, không giấu cái chưa xong

Mỗi mục dưới đây trích đúng file/dòng mã đang chạy. Phần chưa xây được dán nhãn rõ ràng — không lẫn với phần đã có.

Yêu cầu từ ngoài internetVùng không có domain công khaicửa duy nhấtđường thi hành quyền duy nhấtGatewaynhận danhgắn mã dự ánLocalđối chiếu lại mã dự ánlệch thì từ chốiDữ liệudata:<pid>:<Module>nhánh song song sau Gateway — không nằm trên đường tới dữ liệuRedisquản lý subscriptionCloudflarequản lý tài nguyên CFServicemail · AI · R2 · KV…Ghi log bắt buộc — mọi thao tác dữ liệu, không có nhánh tuỳ chọnYêu cầu từ ngoài internetVùng không có domain công khaiGatewaynhận danh · gắn mã dự ánLocalđối chiếu lại mã dự án,lệch thì từ chốiDữ liệudata:<pid>:<Module>đường thi hành quyềnRedisCloudflareServicenhánh song songGhi log bắt buộc — mọi thao tácdữ liệu, không có nhánh tuỳ chọn
Một cửa vào, và chỉ một nhánh sau cửa đó chạm tới dữ liệu. Nguồn: Api/Gateway/README.md (sơ đồ kiến trúc), Api/README.md §4 quyết định #1, §3 GĐ 0 ④⑤.
Một cửa vào, phần còn lại không lộ ra ngoài

Bốn worker nghiệp vụ phía sau không có domain công khai

Toàn bộ traffic bên ngoài chỉ chạm đúng một điểm: Gateway Worker. Bốn worker nghiệp vụ phía sau đều đặt không mở đường công khai, chỉ gọi được qua liên kết worker nội bộ worker-to-worker — không qua internet. Sơ đồ đầy đủ và trích nguồn ở trang API, không vẽ lại ở đây.

Danh tính: chuẩn OAuth2/OIDC, không phải tự chế

Nhận danh + phiên đăng nhập

RS256, không phải HMAC

Resource server chỉ cần JWKS public key, không cầm chung một secret có thể tự ký token giả.

PKCE bắt buộc — mọi client

Kể cả confidential, chỉ chấp nhận S256. Public client gửi kèm client_secret bị từ chối thẳng, không lặng lẽ bỏ qua.

redirect_uri khớp tuyệt đối

Luật sống ở đúng một nơi (redirectpolicy.js), gọi lại ở cả 3 chỗ: đăng ký, phát mã, đổi mã — không có hai bộ luật lệch nhau.

Mã uỷ quyền một lần, TTL 60 giây

kho khoá–giá trị chỉ lưu hash SHA-256 của mã, không lưu bản rõ.

Access token 10 phút + refresh xoay vòng

Dùng lại refresh token cũ (lần hai) là phát hiện có sự cố ngay.

Session thu hồi được ngay lập tức

Session id ngẫu nhiên, không phải JWT tự chứa. Mỗi request kiểm 3 điều kiện: session còn tồn tại, chủ thể còn active, sessionVersion khớp.

So sánh hằng thời gian

timingSafeEqual cho mọi bí mật; phản hồi đăng nhập/OTP giống hệt nhau ở mọi trường hợp sai — không lộ email nào tồn tại.

Không còn backdoor seed

TEST_USERS (10 tài khoản hash cứng, tự seed mọi môi trường) và ADMIN_EMAILS hard-code đã bị xoá hẳn. Admin đầu tiên chỉ tạo qua BOOTSTRAP_TOKEN một lần, khi store còn trống.

Secret không bao giờ lưu bản rõ

Client secret / project secret chỉ salt + SHA-256, hiện nguyên văn đúng một lần lúc tạo/xoay.

Nguồn: Api/SSO/AUTH.md.

Chống lạm dụng

Giới hạn tại đúng những nơi dễ bị dò

Rate limit theo cả IP lẫn email

4 bộ đếm đặt tên rõ cho login/OTP/token: RL_LOGIN, RL_OTP_REQUEST, RL_OTP_VERIFY, RL_TOKEN. OTP hash+salt trong kho khoá–giá trị (không plaintext), tối đa 5 lần đoán rồi huỷ mã.

PBKDF2 100.000 vòng — giới hạn thật

Đây là trần cứng của WebCrypto trên worker ở biên, không phải lựa chọn bảo mật tự nguyện của Ebig — đặt cao hơn thì runtime báo lỗi NotSupportedError. OWASP khuyến nghị cao hơn con số này; phần thiếu được bù bằng RL_LOGIN (10 lần/60 giây) chặn dò mật khẩu tại edge. Đây là điểm CTO giỏi sẽ hỏi đúng câu này — nên nói thẳng, không im lặng bỏ qua.

Nguồn: Api/SSO/AUTH.md §5.

Hai tầng cách ly, không nhầm lẫn tầng nào với tầng nào

"Không dùng chung" đúng cho tầng nào

Mặc định — SaaS dùng chungCách ly theo logicmột hạ tầng dùng chungdata:duan-a:<Module>data:duan-b:<Module>data:duan-c:<Module>cờ tenantEnforce — mặc định TẮTchưa bật thì người ngoài dự án vẫn đi qua, có ghi logRiêng — Chính phủ / BigTechCách ly vật lýDự án Anamespace riêngdata:duan-a:Dự án Bnamespace riêngdata:duan-b:NetworkPolicy chặn ngangNamespace + ResourceQuota + NetworkPolicytầng đúng nghĩa: dự án của bạn không dùng chungMô hình triển khai — chưa phải một triển khai đã đo thật.Mặc định — SaaS dùng chungCách ly theo logicmột hạ tầng dùng chungdata:duan-a:<Module>data:duan-b:<Module>data:duan-c:<Module>cờ tenantEnforce — mặc định TẮTchưa bật thì người ngoài dự ánvẫn đi qua, có ghi logRiêng — Chính phủ / BigTechCách ly vật lýDự án Anamespace riêngdata:duan-a:Dự án Bnamespace riêngdata:duan-b:NetworkPolicy chặn ngangNamespace + ResourceQuota + NetworkPolicytầng đúng nghĩa: dự án của bạnkhông dùng chungMô hình triển khai — chưa phảimột triển khai đã đo thật.
Hai tầng đo hai thứ khác nhau — và hai nửa hình không cùng một mức chắc chắn. Nguồn: nửa trái Api/README.md §5.12; nửa phải App/Landing/README.md và trang Hạ tầng, nơi mô hình triển khai vật lý được dán nhãn là giả lập.
Mặc định — SaaS dùng chung

Cách ly theo logic

Tiền tố khoá CSDL trong bộ nhớ data:<pid>:<Module>, cờ proj:<pid>.tenantEnforce theo từng dự án, mặc định TẮT cho tới khi khách bắt đầu dùng dữ liệu thật. Chưa bật thì người ngoài dự án vẫn đi qua, chỉ ghi log — đây là hành vi có chủ đích, không phải lỗ hổng bị bỏ sót.

Riêng — Chính phủ / BigTech

Cách ly vật lý

Namespace Kubernetes + ResourceQuota + NetworkPolicy chặn khách khác. Đây mới là tầng đúng nghĩa "dự án của bạn không dùng chung" — chi tiết ở Hạ tầng.

Fail-open có chủ ý: SSO không trả lời được → Gateway không chặn truy cập, chỉ ghi log. Lý do: một sự cố của SSO không được biến thành mất truy cập toàn hệ thống. Đây là đánh đổi thật (chọn sẵn sàng hơn chặn cứng trong tình huống hiếm), không phải khiếm khuyết — nhưng phải nói ra, không giấu.

Nguyên tắc nền: một đường thi hành quyền duy nhất (Gateway → Local), không worker nào đọc dữ liệu bằng đường khác. Ghi log bắt buộc mọi thao tác dữ liệu, không còn nhánh tuỳ chọn. Local đối chiếu hai đầu repo/pid với Gateway, từ chối khi lệch x-ebig-pid.

Nguồn: Api/README.md §4, §5.12.

AI chạy dưới danh tính người dùng, không có đường tắt

AI Agent không dùng service account

AI không đọc được gì người gọi nó không tự đọc được — vì nó chạy bằng chính quyền của người dùng thật, không phải một tài khoản dịch vụ có quyền riêng.

Mô hình 12 năng lực chia hai nhóm: nhóm ĐỌC chạy một mình, nhóm LÀM (plan/execute) cần canNguoi: true. 5 luật leo thang khi AI không chắc/chạm tiền/chạm cam kết ngoài/chạm quyết định về người → chuyển cho người, không tự quyết.

Nguồn: Api/AI/knowledge/ai/ranh-gioi.md, Api/README.md quyết định #2.

Hạ tầng mạng / DDoS

Toàn bộ traffic đi qua biên toàn cầu trước khi chạm bất kỳ worker nào

Lọc DDoS và bot xảy ra ở biên, trước khi gói tin chạm tới bất kỳ worker nào của Ebig. Năng lực chặn đó là của lớp biên, không phải số đo riêng của Ebig — ghi rõ để không bị hiểu lầm thành SLA của Ebig.

Tầng K8s riêng dùng thêm đường hầm TLS (tiến trình đường hầm) — cụm không lộ IP công khai. Chi tiết đầy đủ ở Hạ tầng.

Cái chưa xong, có dán nhãn

○ Lộ trình — chưa chạy

:perm — QUYỀN THEO CỘT/DÒNG

0 dòng mã, xác nhận bằng grep trực tiếp: "toàn bộ tầng schema động chưa có mã". 18 module cố định hiện tại không chứa dữ liệu nhạy cảm dạng lương/hồ sơ nhân sự/sổ tài chính. Nên chưa phải rủi ro cấp thiết cho khách đầu tiên, nhưng sẽ thành điểm chặn thật ngay khi khách tự định nghĩa bảng riêng có cột nhạy cảm.

XOAY KHOÁ KÝ JWKS TỰ ĐỘNG

Chưa có — rotateSigningKey phải gọi tay.

MÀN HÌNH CONSENT OAUTH

Chưa có; mọi client đã đăng ký được coi là tin cậy (first-party). Nếu Ebig mở nền tảng cho ứng dụng bên thứ ba thật sự, đây là việc phải làm trước, chưa làm.

ACTION CONTRACT CHO AI (EXECUTION MODE)

Khung khái niệm đã chốt tên (AUTO/APPROVAL/HUMAN ONLY/DISABLED), nhưng 0 dòng mã cho Action Contract thật. Cơ chế "Mode" đang chạy trong core-ai là 8 chế độ hội thoại — khác khái niệm "Execution Mode" kiểm soát AI được tự làm gì. Hai chữ gần giống nhau nhưng không phải một thứ.

Rate limit + CORS ở tầng Gateway cũng chưa có — xem chi tiết ở API. Mã uỷ quyền one-time chưa nguyên tử tuyệt đối (kho khoá–giá trị không có compare-and-delete, cửa sổ đua rất nhỏ nhưng chưa đóng hẳn 100%; muốn tuyệt đối phải chuyển sang Durable Object).

Cái không có bằng chứng, ghi rõ thay vì im lặng

Chứng chỉ tuân thủ & nơi lưu trữ dữ liệu

Chưa công bố chứng chỉ tuân thủ bên thứ ba

Ebig chưa công bố chứng chỉ tuân thủ bên thứ ba (ISO 27001, SOC 2, GDPR…) tại thời điểm viết trang này. Đã quét toàn bộ repo kỹ thuật, không tìm thấy kết quả nào ngoài các đề cập chung chung "bảo mật, sẵn sàng cao" không gắn với chứng chỉ cụ thể. Nếu đây là điều kiện bắt buộc cho tổ chức bạn, hãy trao đổi trực tiếp với đội Ebig để biết lộ trình thật, thay vì dựa vào phỏng đoán.

Nơi lưu trữ dữ liệu (data residency)

Chưa có tài liệu chính sách lưu trữ theo lãnh thổ cho tầng SaaS mặc định, ngoài việc dùng hạ tầng toàn cầu của nền tảng biên và CSDL trong bộ nhớ. Tầng riêng (on-premise/private cloud) thì có kiểm soát vị trí đầy đủ — đó là lý do tồn tại của tầng đó cho cơ quan nhà nước cần chủ quyền dữ liệu.

Vault chỉ có ở tầng K8s riêng

Vault chỉ xuất hiện trong mô hình triển khai K8s riêng, không xuất hiện trong sơ đồ tầng SaaS mặc định. Ở tầng mặc định, secret quản lý qua kho bí mật của nền tảng + băm trong kho khoá–giá trị — cơ chế khác, không nên suy diễn Vault bảo vệ secret của tầng dùng chung.

Cần đối chiếu bảo mật/tuân thủ cho tổ chức bạn?

Trao đổi trực tiếp với đội Ebig để biết đúng cái đã có, đúng cái đang ở lộ trình, cho đúng bài toán của bạn.

Gửi yêu cầu đối chiếu