DEV Community

BeanBean
BeanBean

Posted on Originally published at nextfuture.io.vn

Audit repo trước khi gửi cho model AI free: cổng pre-flight

Originally published on NextFuture

Bạn dán một stack trace vào endpoint model free để hỏi nhanh nguyên nhân lỗi. Trace đó mang theo hostname database nội bộ, một signed S3 URL và email của service account. Bài này dựng một cổng pre-flight chặn đúng loại rò rỉ đó — trước khi repo rời khỏi máy bạn.

Tình huống trên không phải giả định. Một bài hướng dẫn trên Dev.to (tác giả ghi rõ đây là nội dung product outreach cho platform MonkeyCode) kể lại đúng ca đó: model trả lời trong bốn giây, còn phần dữ liệu bị lộ thì sống lâu hơn cuộc hội thoại. Điểm đáng học không nằm ở sản phẩm được giới thiệu, mà ở cách tác giả vẽ lại ranh giới dữ liệu.

Không phải một ranh giới, mà là bốn

Hầu hết team chỉ nhìn thấy ranh giới đầu tiên. Bài viết tách ra bốn, mỗi cái có một kiểu fail riêng:

  • Local → platform: file, context, prompt bạn upload. Đa số nghĩ đây là ranh giới duy nhất.

  • Platform → model provider: phần thực sự rời server và tới model. Đây là đường ai cũng quên.

  • Logs và telemetry: prompt text, completion, metadata, IP mà platform giữ lại. Bạn cần biết mình có quyền xem hoặc xoá không.

  • Nội dung repo: secret nằm trong .env, file docker-compose, git history, và những test fixture "tạm thời" chưa bao giờ tạm thời.

Câu hỏi quan trọng là ranh giới số 2. Một khi code đi qua đó, nó nằm trong hệ thống của nhà cung cấp model. Nếu câu trả lời của bạn là "tôi không biết", bạn chưa nên nối vào bất kỳ model free nào.

Bảng quyết định: gửi, redact, hay không bao giờ

Tác giả đề xuất một bảng khởi điểm và nói rõ nó cố tình bảo thủ:

LoạiVí dụQuyết định

Code publichàm utility, snippet open-sourcegửi
Logic nội bộbusiness rule, thuật toán riêngchỉ gửi nếu bạn chấp nhận provider đọc được
Config`.env`, compose file có credentialkhông bao giờ
SecretAPI key, token, certificatekhông bao giờ
Dữ liệu khách hàngPII, email, địa chỉ IPkhông bao giờ
Tên hạ tầnghostname, bucket name, ARNredact trước
Stack tracecó thể nhúng path, ID, hostnameredact trước
Enter fullscreen mode Exit fullscreen mode

Rule of thumb của bài viết gọn hơn cả bảng: nếu một giá trị cho phép attacker di chuyển ngang trong hệ thống, nó không được qua ranh giới 2.

Cổng pre-flight: gate thắng ý chí

Bảng ở trên chỉ là chính sách. Thứ thực thi được là một script chặn thư mục cho tới khi nó sạch. Dưới đây là ví dụ minh hoạ theo mô tả của bài gốc — bốn bước, chạy bằng rg:

#!/usr/bin/env bash
set -euo pipefail
TARGET="${1:-.}"

# [1/4] file secret: .env*, id_rsa, id_ed25519, *.pem, *.p12, credentials.json
# [2/4] key material: AKIA[0-9A-Z]{16}, ghp_[A-Za-z0-9]{36},
#       -----BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY-----
# [3/4] hostname nội bộ: (internal|prod|staging)[.-]...\.(corp|internal|local)
# [4/4] git log 20 commit gần nhất, grep secret|token|password
Enter fullscreen mode Exit fullscreen mode

Ba bước đầu exit 1 khi khớp; bước cuối chỉ cảnh báo vì history cần xử lý riêng. Bài gốc nói thẳng đây là gate, không phải guarantee: nó bắt pattern, không bắt entropy. Chạy thêm gitleaks hoặc trufflehog cho detection sâu hơn, và coi file binary cùng ảnh là hộp đen — chúng có thể chứa bất cứ thứ gì.

Ba test chứng minh cổng thật sự hoạt động

Một gate không có test là một gate bạn tin nhầm. Bài viết đưa ba test cụ thể:

  • Positive fixture: thư mục chỉ có main.py in ra một dòng. Kỳ vọng: PASS.

  • Negative fixture: thư mục có .env chứa AWS_ACCESS_KEY_ID=AKIA.... Kỳ vọng: FAIL, và log phải nêu tên file.

  • Log test: sau một session thật, kiểm tra platform đã log gì. Request body? Prompt text? Nếu bạn không xem hoặc xoá được, hãy coi server đó là hộp đen và gửi ít hơn nữa.

Hai test đầu thuộc CI. Test thứ ba thuộc checklist đánh giá nhà cung cấp, làm trước khi giao việc thật cho họ.

Prevent, detect, recover

Ba pha, mỗi pha một nhóm hành động cụ thể:

  • Prevent: gate pre-flight trong CI, secret scanning ở mọi push, deny-list cho các path nhạy cảm.

  • Detect: monitor egress traffic, review log của platform, alert theo nội dung prompt.

  • Recover: rotate mọi secret từng chạm ranh giới, revoke token, và giả định log của provider vẫn tồn tại.

Dòng cuối là phần nhiều team bỏ qua. Rotate secret là việc phải làm ngay cả khi bạn tin provider đã xoá — bạn không kiểm chứng được điều đó.

Nếu agent tự gọi tool, ranh giới còn ở runtime

Cổng repo chặn dữ liệu đi ra. Nó không chặn agent tự hành động. Một bài phân tích riêng về agent production đề xuất coi tool layer là biên authorization: thay vì để model gọi tool trực tiếp, chèn một bước kiểm tra policy vào giữa — agent, policy check, tool, rồi mới tới hệ thống doanh nghiệp. Trước mỗi lần thực thi, hệ thống xác minh identity của agent, action được yêu cầu, resource đích và permission tương ứng.

Cùng logic đó áp cho workflow: chia thành các stage plan, validate, approve, execute, verify, checkpoint — thay vì một lần chạy liền mạch. Rollback version không rollback những gì agent đã làm: record đã sửa, ticket đã tạo, message đã gửi. Đó là lý do checkpoint quan trọng hơn khả năng redeploy.

Ở tầng hạ tầng, một bài của Upsun lập luận rằng câu hỏi đúng là agent chạy ở đâu, không phải nó hành xử thế nào. Khuyến nghị của họ: chạy agent trong sandbox cloud ephemeral, reset sau mỗi lần chạy; cấp credential scoped và token read-only; bắt buộc human approval cho action có hiệu ứng lâu dài. Ý tưởng chung là giới hạn blast radius ở tầng hệ thống, để một lần hallucinate hay một prompt injection không kéo theo credential thật.

Khi cách này không đủ

Nếu tổ chức của bạn chịu ràng buộc data residency, NDA về code độc quyền, hoặc một compliance regime cấm xử lý dữ liệu bên ngoài, đừng trỏ server free vào việc thật. Dùng setup self-hosted hoàn toàn với model local, hoặc bỏ hẳn phần model access. Script gate chặn rò rỉ vô tình; nó không cứu bạn khỏi một vi phạm chính sách.

Việc đáng làm tuần này: viết gate, thêm hai test đầu vào CI, rồi thử test thứ ba trên đúng platform bạn đang cân nhắc. Nếu bạn không xem được log của họ, bạn đã có câu trả lời cho ranh giới số 2.


This article was originally published on NextFuture. Follow us for more fullstack & AI engineering content.

Top comments (0)