✅ Checkpoint: nhận diện injection trong code AI

By Better Wise

Quiz

  1. Vì sao code do AI sinh vẫn cần một vòng review bảo mật riêng, dù test đã pass?
    • Vì AI luôn cố tình chèn lỗ hổng để người dùng phải trả tiền cho bản vá.
    • Vì code AI sinh luôn dài hơn code người viết nên khó đọc.
    • Vì AI tối ưu cho đoạn code chạy được theo prompt, thiếu ngữ cảnh hệ thống và không chịu trách nhiệm hậu quả.
    • Vì test tự động không bao giờ kiểm tra được logic nghiệp vụ.
  2. Đoạn code AI sau có rủi ro gì? ```js app.get('/orders', (req, res) => { const sql = "SELECT * FROM orders WHERE customer_id = '" + req.query.customerId + "'"; db.query(sql, (err, rows) => res.json(rows)); }); ```
    • SQL injection do nối chuỗi trực tiếp với dữ liệu từ request.
    • XSS vì dữ liệu người dùng được render vào HTML.
    • Lộ secret vì connection string nằm trong code.
    • Không có rủi ro vì đã dùng db.query.
  3. Bản sửa đúng cho câu SQL trên với driver mysql2 là gì?
    • db.query('SELECT * FROM orders WHERE customer_id = ?', [req.query.customerId], ...)
    • db.query('SELECT * FROM orders WHERE customer_id = ' + Number(req.query.customerId), ...)
    • db.query("SELECT * FROM orders WHERE customer_id = '?'", [req.query.customerId], ...)
    • db.query("SELECT * FROM orders WHERE customer_id = '" + escape(req.query.customerId) + "'", ...)
  4. AI viết `"SELECT * FROM products ORDER BY " + req.query.sort`. Vì sao parameterized query thông thường không sửa được chỗ này?
    • Vì placeholder chỉ bind được giá trị, không bind được tên cột hay từ khóa như ORDER BY, nên phải dùng allowlist.
    • Vì ORDER BY không được phép xuất hiện trong câu SQL có tham số.
    • Vì chỉ PostgreSQL mới parameterize được ORDER BY.
    • Vì driver mysql2 không hỗ trợ mệnh đề ORDER BY.
  5. Đoạn code AI sau gây ra lỗi gì? ```js const el = document.getElementById('comment'); el.innerHTML = comment.text; ```
    • Không có lỗi vì đây chỉ là hiển thị văn bản bình luận.
    • CSRF: kẻ tấn công mượn cookie session để gửi request thay người dùng.
    • XSS: trình duyệt parse comment.text như HTML và chạy script nếu payload chứa thẻ có onerror.
    • SQL injection vì comment.text đi vào câu truy vấn.
  6. Endpoint chuyển tiền `app.post('/api/transfer', ...)` xác thực bằng cookie session nhưng không có CSRF token. Lỗi gốc và lớp phòng thủ phù hợp là gì?
    • Thao tác thay đổi dữ liệu thiếu token; thêm CSRF token, cookie SameSite và kiểm tra header Origin.
    • Render dữ liệu không escape; sửa bằng textContent và CSP.
    • Lộ API key; sửa bằng cách chuyển key sang biến môi trường.
    • Nối chuỗi SQL; sửa bằng parameterized query.
  7. Trong EJS, cú pháp có dấu ____ ngay sau % thì tự escape, còn dấu trừ thì in thô và tạo lỗ hổng XSS.
  8. Thuộc tính cookie dùng để chặn trình duyệt gửi cookie trong request cross-site là ____ (ví dụ giá trị Lax hoặc Strict).
  9. Với PostgreSQL và thư viện pg, tham số đầu tiên trong câu lệnh được viết là ____ thay vì dấu ?.
  10. Hãy tự đánh giá: bạn có thể đọc một đoạn code AI ngắn và chỉ ra lỗi injection (SQL injection, XSS, CSRF) cùng bản sửa tối thiểu không? Viết ra 2 lỗi bạn tìm thấy và cách sửa từng lỗi.

Sign in to submit answers.