Một nhóm đã phụ thuộc rất nhiều vào AI để tạo mã ứng dụng của họ—một phương pháp hiện được gọi là "vibe coding". Trong vòng một tuần sau khi triển khai, máy chủ của họ đã bị xâm nhập. Nhà phát triển đã chia sẻ sự cố này có thể đoán ngay được phương thức tấn công vì các lỗ hổng có thể dự đoán được. Bài viết này sẽ phân tích những gì đã xảy ra sai, tại sao mã do AI tạo ra lại dễ bị khai thác bảo mật một cách đặc biệt, và cung cấp một danh sách kiểm tra cụ thể để bảo mật các dự án được hỗ trợ bởi AI trước khi chúng được đưa vào sản xuất.
nút
Sự cố: Chuyện gì đã xảy ra
Câu chuyện xuất hiện trên cộng đồng r/webdev của Reddit vào tháng 1 năm 2026, nhanh chóng nhận được hơn 400 lượt upvote và gây ra cuộc thảo luận sôi nổi. Một nhà phát triển đã chia sẻ những gì đã xảy ra tại công ty của họ khi hai đồng nghiệp áp dụng "vibe coding"—thực hành xây dựng ứng dụng nhanh chóng bằng các công cụ tạo mã AI như ChatGPT, Claude hoặc Cursor với sự xem xét thủ công tối thiểu.
Nhóm đã rất phấn khởi. Họ triển khai nhanh chóng. AI xử lý mọi thứ từ các truy vấn cơ sở dữ liệu đến các luồng xác thực. Khi đến thời điểm triển khai, AI thậm chí còn đề xuất số phiên bản "16.0.0" cho bản phát hành đầu tiên của họ—một chi tiết sau này sẽ trở nên trớ trêu một cách đáng sợ.
Một tuần sau khi triển khai, máy chủ đã bị tấn công.
Nhà phát triển chia sẻ câu chuyện không hề ngạc nhiên. Khi xem xét codebase, họ có thể ngay lập tức xác định nhiều lỗ hổng bảo mật mà AI đã tạo ra. Những kẻ tấn công cũng đã tìm thấy chúng.
Đây không phải là một sự cố đơn lẻ. Các nhà nghiên cứu bảo mật đã cảnh báo về cái mà họ gọi là "lỗ hổng tổng hợp"—các lỗi bảo mật xuất hiện gần như độc quyền trong mã do AI tạo ra vì cách các mô hình ngôn ngữ được đào tạo và cách chúng tiếp cận các tác vụ lập trình.
Tại sao mã do AI tạo ra dễ bị tổn thương
Các trợ lý lập trình AI được đào tạo dựa trên các kho mã công khai khổng lồ. Điều này tạo ra một số điểm mù về bảo mật:
1. Dữ liệu đào tạo bao gồm mã dễ bị tổn thương
GitHub, Stack Overflow và các trang web hướng dẫn chứa hàng triệu dòng mã không an toàn. Các ví dụ được viết cho mục đích học tập thường bỏ qua các cân nhắc về bảo mật. Các mẫu lỗi thời vẫn còn trong dữ liệu đào tạo. AI học từ tất cả chúng một cách đồng đều.
Khi bạn yêu cầu AI viết mã xác thực, nó có thể tái tạo một mẫu từ một hướng dẫn năm 2018 thiếu bảo vệ CSRF, hoặc một câu trả lời trên Stack Overflow lưu trữ mật khẩu dưới dạng văn bản thuần túy để đơn giản.
2. AI tối ưu hóa cho "Hoạt động" chứ không phải "Bảo mật"
Các mô hình ngôn ngữ tạo mã đáp ứng yêu cầu. Nếu bạn yêu cầu một điểm cuối đăng nhập, AI sẽ tạo ra thứ gì đó đăng nhập người dùng. Việc triển khai đó có chống lại SQL injection, băm mật khẩu đúng cách hay xác thực mã thông báo phiên hay không là thứ yếu so với mục tiêu chính.
Điều này khác biệt cơ bản so với cách các nhà phát triển có kinh nghiệm suy nghĩ. Các nhà phát triển có ý thức bảo mật sẽ hỏi "điều này có thể bị khai thác như thế nào?" ở mỗi bước. Các trợ lý AI không tự nhiên áp dụng tư duy đối lập này.
3. Giới hạn cửa sổ ngữ cảnh ngăn chặn bảo mật toàn diện
Các lỗ hổng bảo mật thường xuất hiện từ sự tương tác giữa các thành phần. Một kiểm tra xác thực có thể tồn tại trong một tệp trong khi một truy vấn cơ sở dữ liệu trong một tệp khác giả định rằng xác thực đã xảy ra. AI tạo mã từng tệp hoặc từng chức năng không phải lúc nào cũng có thể duy trì ngữ cảnh bảo mật này.
4. Nhà phát triển tin tưởng quá mức vào đầu ra của AI
Đây là yếu tố con người. Khi mã đến từ một AI có vẻ tự tin và có năng lực, các nhà phát triển thường bỏ qua việc xem xét cẩn thận mà họ sẽ áp dụng cho mã từ một thành viên cấp dưới. Cách tiếp cận "vibe coding" rõ ràng chấp nhận điều này: tạo nhanh, triển khai nhanh, sửa sau.
Vấn đề là các lỗ hổng bảo mật thường không thể "sửa sau" một khi kẻ tấn công tìm thấy chúng trước.
7 lỗ hổng bảo mật phổ biến nhất trong API do AI tạo ra
Dựa trên phân tích các kho mã do AI tạo ra và các cuộc kiểm toán bảo mật, các lỗ hổng này xuất hiện thường xuyên nhất:
1. Thiếu hoặc xác thực đầu vào yếu
Các điểm cuối do AI tạo ra thường chấp nhận đầu vào của người dùng trực tiếp mà không cần làm sạch:
// AI-generated: Dễ bị injection
app.post('/search', (req, res) => {
const query = req.body.searchTerm;
db.query(`SELECT * FROM products WHERE name LIKE '%${query}%'`);
});
Việc khắc phục yêu cầu các truy vấn tham số hóa, giới hạn độ dài đầu vào và xác thực ký tự—các bước mà AI thường bỏ qua.
2. Luồng xác thực bị hỏng
Các vấn đề phổ biến bao gồm:
- Mã thông báo được lưu trữ trong localStorage thay vì cookie httpOnly
- Thiếu thời gian hết hạn của mã thông báo
- ID phiên yếu hoặc có thể dự đoán được
- Không giới hạn tốc độ cho các lần đăng nhập
- Mã thông báo đặt lại mật khẩu không hết hạn
3. Tiếp xúc dữ liệu quá mức
AI có xu hướng trả về toàn bộ đối tượng cơ sở dữ liệu thay vì chọn các trường cụ thể:
// AI-generated: Trả về các trường nhạy cảm
app.get('/user/:id', (req, res) => {
const user = await User.findById(req.params.id);
res.json(user); // Bao gồm passwordHash, internalNotes, v.v.
});
4. Thiếu kiểm tra ủy quyền
AI tạo các điểm cuối hoạt động nhưng quên xác minh người dùng yêu cầu có quyền:
// AI-generated: Không có xác minh quyền sở hữu
app.delete('/posts/:id', async (req, res) => {
await Post.deleteOne({ _id: req.params.id });
res.json({ success: true });
});
// Bất kỳ người dùng đã xác thực nào cũng có thể xóa bất kỳ bài đăng nào
5. Các phụ thuộc không an toàn
AI thường gợi ý các gói phổ biến mà không kiểm tra các lỗ hổng đã biết:
// AI gợi ý gói lỗi thời với CVEs
const jwt = require('jsonwebtoken'); // Phiên bản không được chỉ định
Nếu không có việc ghim phiên bản rõ ràng và quét lỗ hổng, các dự án sẽ kế thừa nợ bảo mật ngay từ ngày đầu tiên.
6. Mã hóa cứng các bí mật và thông tin đăng nhập
Điều này xuất hiện đáng ngạc nhiên thường xuyên trong mã do AI tạo ra:
// AI-generated: Bí mật trong mã nguồn
const stripe = require('stripe')('sk_live_abc123...');
AI học từ các hướng dẫn và ví dụ trong đó các khóa được mã hóa cứng là phổ biến cho mục đích minh họa.
7. Thiếu các tiêu đề bảo mật
Các ứng dụng Express, Flask hoặc Rails do AI tạo ra thường thiếu:
- Cấu hình CORS (hoặc CORS quá mức cho phép)
- Các tiêu đề Content-Security-Policy
- X-Frame-Options
- Phần mềm trung gian giới hạn tốc độ
- Thực thi HTTPS
Danh sách kiểm tra kiểm thử bảo mật cho các dự án được hỗ trợ bởi AI
Trước khi triển khai bất kỳ dự án nào có mã do AI tạo ra, hãy xem xét danh sách kiểm tra này:
Xác thực & Ủy quyền
- [ ] Tất cả các điểm cuối đều yêu cầu xác thực khi thích hợp
- [ ] Kiểm tra ủy quyền xác minh người dùng sở hữu/có thể truy cập các tài nguyên được yêu cầu
- [ ] Mật khẩu được băm bằng bcrypt, Argon2 hoặc tương tự (hệ số chi phí ≥10)
- [ ] Mã thông báo phiên là ngẫu nhiên mã hóa và có thời hạn
- [ ] Các lần đăng nhập không thành công được giới hạn tốc độ
- [ ] Mã thông báo đặt lại mật khẩu chỉ sử dụng một lần và có giới hạn thời gian
- [ ] JWT bao gồm thời hạn và được xác thực phía máy chủ
Xác thực đầu vào
- [ ] Tất cả đầu vào của người dùng được xác thực về kiểu, độ dài và định dạng
- [ ] Các truy vấn cơ sở dữ liệu sử dụng các câu lệnh tham số hóa
- [ ] Tải lên tệp xác thực kiểu, kích thước và quét phần mềm độc hại
- [ ] URL và chuyển hướng được xác thực dựa trên danh sách cho phép
- [ ] Các trình phân tích cú pháp JSON/XML có giới hạn kích thước được cấu hình
Bảo vệ dữ liệu
- [ ] Phản hồi API chỉ trả về các trường cần thiết
- [ ] Dữ liệu nhạy cảm được mã hóa khi lưu trữ
- [ ] Thông tin đăng nhập cơ sở dữ liệu sử dụng biến môi trường, không phải mã
- [ ] Các bí mật được lưu trữ trong các hệ thống quản lý bí mật thích hợp
- [ ] Nhật ký không chứa mật khẩu, mã thông báo hoặc PII
Bảo mật truyền tải
- [ ] HTTPS được thực thi trong môi trường sản xuất
- [ ] Các tiêu đề HSTS được cấu hình
- [ ] Yêu cầu TLS 1.2+
- [ ] Các cookie an toàn có cờ Secure và HttpOnly
Bảo mật dành riêng cho API
- [ ] Giới hạn tốc độ ngăn chặn lạm dụng
- [ ] CORS được cấu hình cho các nguồn gốc cụ thể, không phải
* - [ ] Phiên bản hóa API cho phép ngừng sử dụng các điểm cuối không an toàn
- [ ] Thông báo lỗi không tiết lộ chi tiết nội bộ
- [ ] GraphQL có giới hạn độ sâu/phức tạp của truy vấn
Phụ thuộc
- [ ] Tất cả các gói có các ghim phiên bản cụ thể
- [ ]
npm audit/pip check/ tương tự không hiển thị lỗ hổng nghiêm trọng nào - [ ] Cập nhật phụ thuộc tự động được cấu hình
- [ ] Không có gói nào bị bỏ rơi hoặc không được duy trì
Cách kiểm thử bảo mật API của bạn trước khi triển khai
Kiểm tra thủ công là không đủ. Bạn cần kiểm thử hệ thống để phát hiện các lỗ hổng mà AI đã tạo ra và bạn đã bỏ qua.
Bước 1: Quét bảo mật tự động
Sử dụng các công cụ được thiết kế để tìm các lỗ hổng phổ biến:
# Đối với các dự án Node.js
npm audit --audit-level=high
# Đối với các dự án Python
pip-audit
# Đối với các hình ảnh container
trivy image your-app:latest
Bước 2: Kiểm thử bảo mật API
Đây là lúc Apidog trở nên thiết yếu. Thay vì kiểm thử thủ công từng điểm cuối, bạn có thể:
- Nhập đặc tả API của bạn (OpenAPI/Swagger) hoặc để Apidog khám phá các điểm cuối

2. Tạo các kịch bản kiểm thử bảo mật để kiểm tra:
- Thiếu xác thực trả về 401
- Người dùng sai truy cập tài nguyên trả về 403
- Đầu vào không hợp lệ trả về 400 với thông báo lỗi an toàn
- Các nỗ lực SQL injection bị chặn
- Chạy các bộ kiểm thử tự động trước mỗi lần triển khai
- Tích hợp với CI/CD để bắt lỗi hồi quy
Với trình tạo kiểm thử trực quan của Apidog, bạn không cần phải viết các kiểm thử bảo mật từ đầu. Xác định các khẳng định như "phản hồi không được chứa 'mật khẩu'" hoặc "yêu cầu không có mã thông báo xác thực phải trả về 401" và chạy chúng trên toàn bộ bề mặt API của bạn.
Bước 3: Mô phỏng kiểm thử thâm nhập
Kiểm thử API của bạn như một kẻ tấn công sẽ làm:
- Liệt kê các điểm cuối - Có các tuyến đường ẩn hoặc không được ghi lại không?
- Kiểm thử bỏ qua xác thực - Bạn có thể truy cập các tuyến đường được bảo vệ mà không có mã thông báo hợp lệ không?
- Thử các cuộc tấn công injection - SQL, NoSQL, command injection trên tất cả các trường nhập liệu
- Kiểm tra IDOR - Người dùng A có thể truy cập dữ liệu của người dùng B bằng cách thay đổi ID không?
- Lạm dụng giới hạn tốc độ - Điều gì xảy ra với 1000 yêu cầu mỗi giây?
Các kịch bản kiểm thử của Apidog cho phép bạn mô phỏng các cuộc tấn công này một cách có hệ thống, lưu kết quả để so sánh giữa các lần triển khai.
Bước 4: Kiểm tra tiêu đề bảo mật
Kiểm tra các tiêu đề phản hồi của bạn:
curl -I https://your-api.com/endpoint
Tìm kiếm:
Strict-Transport-SecurityX-Content-Type-Options: nosniffX-Frame-Options: DENYContent-Security-Policy
Xây dựng quy trình làm việc ưu tiên bảo mật với các công cụ AI
Các trợ lý lập trình AI sẽ không biến mất—chúng đang ngày càng mạnh mẽ hơn. Giải pháp không phải là tránh chúng mà là xây dựng bảo mật vào quy trình làm việc của bạn.
Kỹ thuật tạo Prompt cho bảo mật
Khi sử dụng AI để tạo mã, hãy yêu cầu rõ ràng các cân nhắc về bảo mật:
Thay vì:
"Tạo một điểm cuối đăng ký người dùng"
Hãy hỏi:
"Tạo một điểm cuối đăng ký người dùng với xác thực đầu vào, băm mật khẩu bằng bcrypt với hệ số chi phí 12, bảo vệ chống lại các cuộc tấn công thời gian, giới hạn tốc độ và xử lý lỗi phù hợp không tiết lộ thông tin về việc email có tồn tại hay không"
Các giai đoạn xem xét bắt buộc
Thiết lập một quy trình làm việc trong đó mã do AI tạo ra phải trải qua:
- Kiểm tra thủ công - Mã này có thực hiện đúng ý định của chúng ta không?
- Kiểm tra cú pháp tự động (linting) - ESLint, Pylint với các plugin bảo mật
- Quét bảo mật - Snyk, npm audit, OWASP dependency check
- Kiểm thử API - Bộ kiểm thử Apidog xác thực các yêu cầu bảo mật
- Triển khai thử nghiệm (Staging deployment) - Chạy các kiểm thử tích hợp trong môi trường thực tế
Coi mã AI như đầu vào không đáng tin cậy
Đây là sự thay đổi tư duy then chốt. Mã từ AI nên được xử lý với sự hoài nghi tương tự như mã từ một người đóng góp không xác định. Bạn có triển khai mã từ một yêu cầu kéo ngẫu nhiên mà không xem xét không? Áp dụng tiêu chuẩn tương tự cho mã do AI tạo ra.
Kết luận
Việc máy chủ bị tấn công một tuần sau khi triển khai không phải do những kẻ tấn công tinh vi hay các lỗ hổng zero-day gây ra. Nó do các lỗ hổng phổ biến mà các công cụ AI thường xuyên tạo ra và các phương pháp "vibe coding" thường xuyên bỏ sót.
Việc tạo mã bằng AI rất mạnh mẽ. Nó đẩy nhanh quá trình phát triển và làm cho các tác vụ phức tạp trở nên dễ tiếp cận. Nhưng nếu không có kiểm thử bảo mật có hệ thống, tốc độ đó sẽ trở thành một điểm yếu.
Các công cụ như Apidog giúp việc kiểm thử bảo mật trở nên thực tế bằng cách cho phép bạn xác định và tự động hóa các yêu cầu bảo mật trên toàn bộ bề mặt API của bạn. Mục tiêu không phải là làm chậm quá trình phát triển được hỗ trợ bởi AI—mà là xây dựng lớp xác minh mà mã do AI tạo ra yêu cầu.
nút
Máy chủ của bạn không quan tâm mã được viết bởi con người hay AI. Nó chỉ quan tâm liệu mã đó có an toàn hay không.
