19 Tháng 8, 2026
Bảo mật khi để AI viết code: 6 lỗ hổng hay gặp và cách chặn

Bảo mật khi để AI viết code: 6 lỗ hổng hay gặp và cách chặn
Bảo mật code AI là giữ dữ liệu, khóa truy cập và quyền hệ thống an toàn khi máy tham gia viết phần mềm. Sau hơn 14.000 dự án, tụi em chỉ nhận code AI khi nó qua 2 lần duyệt gồm vòng máy và cửa dev senior, vì một màn hình chạy đúng chưa chứng minh quyền cùng dữ liệu đã an toàn. Người giữ cửa cuối.
AI viết code nhanh, 6 lỗ hổng vẫn cần người chặn
AI thường tối ưu cho yêu cầu “làm cho chạy”. Nếu đề bài không nhắc khóa bí mật, quyền truy cập, dữ liệu rỗng hay nguồn gốc thư viện, nó chọn đường ngắn và trả một đoạn code rất đẹp mắt. Anh chị chạy ca mẫu thấy đúng, rồi rủi ro nằm im tới lúc gặp dữ liệu thật. Đừng hoảng vì AI.
Rủi ro nằm ở quy trình giao và nhận code. Tụi em cho code đi qua 6 lượt quét theo từng nhóm lỗ hổng và 2 lượt duyệt gồm vòng máy cùng cửa dev senior trước máy chủ. Cách làm bám mô hình phát triển phần mềm AI-Native, nơi người ra đề, kiểm soát và chịu trách nhiệm. Cấm bỏ cửa.
Soi đúng 6 lỗ hổng trước khi code lên máy chủ
Mỗi mục dưới đây có 2 phần để đội dev dùng ngay, gồm dấu hiệu nhìn thấy trong code và cách chặn để bàn giao lại cho người chịu trách nhiệm ở cửa cuối. Đội chạy đủ 6 lần kiểm, rồi lặp 2 lần bằng dữ liệu hoặc quyền khác để xem lỗi có đổi mặt hay không. Soi theo thứ tự. Đừng lướt.

1. Thấy tiện nên dán luôn khóa bí mật vào code
AI nhận một ví dụ có API key rồi đưa nguyên chuỗi đó vào file nguồn. Dấu hiệu là các biến mang tên API_KEY, SECRET, TOKEN được gán trực tiếp, hoặc khóa xuất hiện trong file cấu hình bị đưa lên Git. Chỉ cần 1 lần đẩy nhầm, đổi file sau đó chưa đủ vì khóa vẫn còn trong lịch sử. Dấu hiệu rất rõ.
MONA chặn ở 3 chỗ: spec cấm secret trong code, công cụ quét trước khi ghép, dev senior kiểm cách lấy khóa từ biến môi trường hoặc kho bí mật. Nếu máy quét báo đỏ, đội thu hồi khóa cũ và cấp khóa khác trước khi làm tiếp. Không vá cho qua.
// Sai: const paymentKey = "sk_live_vi_du";
// Đúng hướng: lấy biến môi trường PAYMENT_API_KEY
// Cửa kiểm: thiếu biến thì dừng khởi động, không chạy với giá trị rỗng.
2. AI gọi tên một thư viện nghe thật nhưng kho mã không có
AI từng học hàng triệu tên gói nên rất giỏi ghép ra một cái tên hợp tai. Khi gói đó chưa tồn tại, kẻ xấu có thể đăng gói trùng tên và chờ đội dev cài nhầm. Dấu hiệu là dependency mới không có trang chính chủ, không thấy lịch sử phát hành hoặc không nằm trong danh sách dự án đã duyệt.
Cách chặn gồm 3 bước: kiểm tên trên kho chính thức, đối chiếu nhà phát hành, khóa phiên bản cùng mã kiểm tra trong lockfile. Tụi em còn dùng danh sách cho phép cho phần lõi; AI muốn thêm thư viện ngoài danh sách phải nêu lý do và có người duyệt. Đừng cài theo trí nhớ máy.
3. Dữ liệu người dùng đi thẳng vào câu lệnh
Một đoạn code nối chuỗi tìm kiếm vào câu SQL, hoặc in thẳng nội dung khách nhập ra HTML, mở cửa cho SQL injection và XSS. Hai lỗ hổng này khác đường tấn công nhưng chung một lỗi gốc: dữ liệu ngoài hệ thống được tin như lệnh. Ca thử bằng tên “Nguyễn Văn A” vẫn xanh nên lỗi rất dễ lọt.
Tụi em chặn bằng truy vấn có tham số, mã hóa đầu ra theo đúng ngữ cảnh và giới hạn kiểu cùng độ dài từ spec. Dev senior chạy ít nhất 3 ca: dữ liệu hợp lệ, ký tự điều khiển, chuỗi dài ngoài giới hạn. Bài viết spec cho AI chỉ cách ghi 3 ca đó thành đáp án để máy không tự đoán.
Đầu vào luôn là dữ liệu. Đừng để nó trở thành câu lệnh.
4. Một chức năng nhỏ lại được cấp quyền quá lớn
AI hay chọn tài khoản quản trị vì code ngắn và ca thử dễ qua. Một chức năng chỉ đọc lịch hẹn lại được quyền sửa toàn bộ cơ sở dữ liệu; một tác vụ gửi thông báo lại cầm quyền xóa tài nguyên. Sai 1 nhánh khi đó kéo theo phạm vi thiệt hại rộng hơn nhiều so với việc đang làm.
MONA tách quyền theo vai trò và theo dịch vụ. Dev senior đọc cả 2 chiều: tài khoản này được làm gì, tài nguyên này cho những ai đụng. Với mỗi chức năng, đội chạy 2 tài khoản, 1 đúng quyền và 1 thiếu quyền; tài khoản thứ 2 phải bị từ chối và có log.
Cấp vừa đủ việc. Hệ thống chạm tiền hoặc dữ liệu nhạy cảm đừng giao AI tự mở quyền rồi tự duyệt.
5. Code chạy được nhưng không rõ giấy phép
AI sinh một đoạn giống mã nguồn nó từng thấy, còn đội nhận code không biết phần đó đến từ đâu và giấy phép cho phép dùng ra sao. Rủi ro tăng khi một thư viện mới kéo theo nhiều gói con; nhìn 1 dòng cài đặt chưa thấy hết chuỗi phụ thuộc phía sau.
Tụi em kiểm 3 thứ trước khi nhận: nguồn của thư viện, giấy phép, danh sách phụ thuộc đã khóa phiên bản. Đoạn code dài và khác hẳn chuẩn dự án được đánh dấu để người đọc kỹ hơn, không mặc định là “AI tự nghĩ”. Nếu không chứng minh được quyền dùng, bỏ đoạn đó và viết lại từ spec. Chạy được vẫn chưa đủ.
6. Nội dung khách nhập quay sang ra lệnh cho bot
Phần mềm có AI thường nhận tài liệu, câu chat hoặc nội dung web. Prompt injection xảy ra khi một đoạn dữ liệu được viết như mệnh lệnh, khiến bot bỏ quy tắc ban đầu, lộ nội dung hoặc gọi công cụ sai. Chỉ 1 câu nằm trong file tải lên cũng đủ thử ranh giới nếu hệ thống trộn dữ liệu với chỉ dẫn.
Cách chặn có 4 lớp: tách chỉ dẫn hệ thống khỏi dữ liệu, giới hạn công cụ bot được gọi, kiểm đầu ra trước hành động ghi hoặc xóa, lưu log toàn bộ lần gọi. Với hành động nhạy cảm, người dùng phải xác nhận ở cửa cuối. Cách dựng chatbot AI bám nguồn sẽ an toàn hơn bot được phép tự ứng biến ngoài kho.
Dữ liệu không được ra lệnh. Đội làm AI agent theo yêu cầu phải ghi ranh giới này ngay trong spec, đừng bổ sung sau lúc bot đã cầm quyền gọi hệ thống thật.
Anh chị đang có một tính năng AI chuẩn bị nối vào dữ liệu thật? Gửi spec và 1 đoạn code mẫu cho MONA. Tụi em rà đúng 6 nhóm trên, chỉ ra chỗ cần thu hồi khóa, hạ quyền hoặc thêm cửa xác nhận trước khi hệ thống được phép ghi dữ liệu.
Nhìn tận tay: 8 dòng chính sách chặn lỗi ngay từ lúc giao AI
Quét sau khi code xong vẫn cần, nhưng ghi ranh giới vào đề bài giúp AI tránh nhiều đường sai từ đầu. Đội đọc 8 dòng như 8 lần kiểm, rồi chạy 2 lần bằng tài khoản đúng quyền và thiếu quyền trước khi nhận kết quả trên môi trường thật. Copy rồi sửa.
1. Không ghi secret, token, mật khẩu hoặc khóa riêng trong code và log.
2. Chỉ dùng thư viện nằm trong danh sách cho phép, khóa rõ phiên bản.
3. Mọi đầu vào ngoài hệ thống phải kiểm kiểu, độ dài và miền giá trị.
4. Truy vấn dữ liệu dùng tham số, không nối chuỗi từ đầu vào.
5. Đầu ra HTML phải mã hóa theo đúng ngữ cảnh hiển thị.
6. Tài khoản dịch vụ chỉ có quyền đủ cho đúng chức năng.
7. Hành động ghi, xóa hoặc chuyển tiền phải qua cửa xác nhận đã chốt.
8. Mọi lỗi bảo mật phải có log, không ghi dữ liệu nhạy cảm vào log.
Chính sách 8 dòng cần đi cùng ít nhất 2 ca thử cho mỗi quyền: đúng quyền và sai quyền. Với đầu vào, thêm chuỗi rỗng cùng ký tự điều khiển. Đây là phần Spec-Driven Development làm rất tốt: bảo mật trở thành tiêu chí nghiệm thu, thay cho một lời nhắc chung chung ở cuối dự án.
Máy quét soi lỗi lặp, senior giữ cửa cuối
Máy quét đi qua 6 lượt theo 6 nhóm dấu vết rõ, từ secret và dependency tới câu truy vấn nối chuỗi; dev senior giữ 2 lượt duyệt cho quy tắc kinh doanh, quyền cùng hậu quả khi sai. Mỗi bên giữ một việc.

| Lớp kiểm | Bắt tốt | Không được tự chốt |
|---|---|---|
| Quét tự động | 6 nhóm mẫu nguy hiểm, dependency và secret | Nghiệp vụ, mức quyền đúng, quyết định phát hành |
| AI rà vòng đầu | Đối chiếu spec, gợi ý ca thử, tìm nhánh thiếu | Ranh giới dữ liệu và trách nhiệm kinh doanh |
| Dev senior | Ngữ cảnh, kiến trúc, quyền, khả năng vận hành | Không bỏ qua bằng câu “máy đã báo xanh” |
Tại MONA, code AI viết phải qua 2 cửa trước máy chủ: vòng máy và cửa dev senior. Quy trình AI code review dùng checklist 8 điểm, trong đó bảo mật đầu vào và quyền truy cập là 2 dòng riêng. Tách ra như vậy giúp người duyệt không gộp mọi rủi ro vào một ô “security” rồi đánh dấu cho xong.
Cách MONA vá 6 lỗ này trong quy trình hằng ngày
Tụi em cho AI sinh code, viết kiểm thử và rà vòng đầu. Tụi em không cho máy tự phê duyệt đoạn code nó vừa tạo rồi đưa thẳng lên máy chủ. Mọi thay đổi đi qua 2 cửa; phần liên quan tiền, dữ liệu nhạy cảm hoặc quyền quản trị được đọc kỹ hơn trước lúc phát hành. Người ký cửa cuối.
Con chatbot đang trực web mona.media và tổng đài 1900 636 648 là một ví dụ gần. Kiến trúc RAG buộc bot tìm mẩu kiến thức có nguồn trước khi trả lời; một kho con nạp 10 file thành 70 chunk. Code của nó vẫn qua dev senior, vì bot bám nguồn giải quyết chuyện trả lời, chưa giải quyết thay chuyện quyền và vận hành.
Từ 2016, hơn 14.000 dự án cho tụi em đủ lý do để giữ cửa người. 85% khách tiếp tục đồng hành nghĩa là phần mềm còn được sửa, nâng cấp và vận hành lâu sau lần bàn giao đầu; bảo mật phải đọc được, theo dõi được, thu hồi được khi có sự cố.
Bảo mật không nằm ở 1 máy quét, nó chạy xuyên cả 4 trụ
SDD ghi ranh giới và ca nghiệm thu. AI-DLC đưa máy quét vào từng khâu. Kanban giữ thay đổi nhỏ để người đọc kịp. Agentic SDLC chỉ mở cho MVP nhỏ, không giao hệ thống chạm tiền tự chạy. Đó là 4 trụ cùng 2 cửa. Quy trình mới bảo vệ code.

Whitepaper 14 trang phát hành ngày 19/08/2026 đặt bảo mật trong mô hình phát triển phần mềm AI-Native, nơi công cụ được thay nhưng ranh giới trách nhiệm giữ nguyên. Đội đang mua công cụ Spec-Driven Development cần hỏi trước: nó có giúp kiểm 8 dòng chính sách hay chỉ sinh code nhanh hơn?
3 loại hệ thống đừng cho AI tự viết rồi tự đưa lên chạy
Hệ thống chạm tiền, giữ dữ liệu nhạy cảm hoặc có quyền xóa trên diện rộng cần 3 lần kiểm theo từng nhóm rủi ro và 2 lần duyệt tách vai ở cửa cuối. Cả 3 loại đều có hậu quả vượt khỏi một màn hình lỗi. Chậm lại ở đây.
Quan điểm của tụi em đi ngược lời quảng cáo “agent tự làm hết”: biết phần nào cấm tự chạy quan trọng ngang tốc độ. Anh chị cần thử ý tưởng nhanh thì xem bộ AI agent; còn luồng chạm 3 nhóm trên, hãy quay về SDD cùng AI-DLC và thêm kiểm soát.
Câu hỏi thường gặp về bảo mật code AI
AI viết code có an toàn không?
An toàn khi có spec, quét tự động và dev senior duyệt; sau hơn 14.000 dự án, tụi em vẫn giữ 2 lần duyệt vì code do máy sinh cũng phải có người nhận trách nhiệm trước máy chủ. Không giao máy tự ký.

Bảo mật code AI cần xử lý lỗ hổng nào trước?
Khóa bí mật lộ ra phải thu hồi ngay, rồi kiểm đầu vào và quyền truy cập. Ba nhóm này mở đường trực tiếp vào hệ thống. Sau đó rà thư viện, giấy phép và prompt injection theo đủ 6 mục.
Máy quét bảo mật có thay dev senior được không?
Không. Máy quét bắt mẫu xấu lặp lại; dev senior quyết quyền nào vừa đủ, quy tắc nào ảnh hưởng tiền và ca nào cấm phát hành. Quy trình cần đủ 2 lớp.
Prompt injection có phải lỗi của mô hình AI không?
Nó là rủi ro của cách hệ thống trộn dữ liệu với chỉ dẫn và cấp công cụ. Tách 2 lớp, giới hạn hành động, yêu cầu xác nhận cho thao tác nhạy cảm và giữ log giúp chặn đường tấn công.
Khóa 6 lỗ hổng trước khi nối code AI vào dữ liệu thật
Bảo mật code AI bắt đầu bằng 6 lần kiểm: secret nằm đâu, thư viện có thật không, đầu vào đi đâu, quyền rộng cỡ nào, giấy phép ra sao, dữ liệu có ra lệnh cho bot được không. Ghi 8 dòng chính sách vào spec và giữ 2 lần duyệt. Đủ rồi mới nối thật.
Anh chị đang chuẩn bị đưa một chức năng AI vào phần mềm viết riêng hoặc chương trình chuyển đổi AI cho doanh nghiệp, gọi 1900 636 648. Tụi em sẽ rà đúng 6 nhóm trong bài và trả danh sách việc phải chặn trước production, không dùng lời hứa “an toàn cao” thay cho bằng chứng.
Đưa 1 đoạn code qua đủ 6 câu hỏi trước khi đưa cả hệ thống lên mạng
Nếu còn secret trong file, thư viện chưa rõ nguồn hoặc quyền chưa tách, tụi em chỉ đúng dòng cần sửa và cửa cần thêm trước khi anh chị cho phép chạy thật.
Bài viết liên quan
Dịch vụ thiết kế
website chuyên nghiệp
Sở hữu website với giao diện đẹp, độc quyền 100%, bảo hành trọn đời với khả năng
mở rộng tính năng linh hoạt theo sự phát triển doanh nghiệp ngay hôm nay!

























Khoá học AI miễn phí
Công cụ AI trong công việc
VI
EN


