SecLab
Injection & Output EncodingchallengeĐộ khó 4/537 phút

Thử thách: bốn interpreter, một nguyên tắc

Mục tiêu: Sau bài này bạn nhận diện được interpreter trong một đoạn code lạ và chọn đúng bản vá mà không cần tra bảng.

V1CWE-1336CWE-78CWE-89A05:2025
Bước 1 / 5 · read3 phút

Mục tiêu

Năm bài trước dạy bốn interpreter cụ thể: SQL, ORM, HTML, shell, XML. Bài này kiểm một thứ khác: bạn có nhận ra một interpreter mà bài học chưa dạy hay không.

Vì trong công việc thật, interpreter thứ sáu luôn xuất hiện — một template engine, một thư viện expression, một trình chạy quy tắc, một truy vấn LDAP, một chuỗi định dạng log. Không danh sách nào phủ hết, nên thứ đáng học là cách nhận ra.

Ba câu hỏi, và chúng đủ cho mọi interpreter bạn sẽ gặp:

  1. Dữ liệu này đi vào một thứ sẽ phân tích nó không? Nếu nó chỉ được lưu hoặc so sánh thì không phải injection.
  2. Có ranh giới nào tách lệnh và dữ liệu ở tầng giao thức không? Có → tham số hoá. Không → phải tự dựng ranh giới, thường bằng danh sách trắng.
  3. Dữ liệu có bao giờ trở thành cú pháp thay vì giá trị không? Nếu có, không API nào tham số hoá được nó — cần ánh xạ sang hằng số.

Việc phải làm. Bốn đoạn code, bốn interpreter, ít nhất một cái không có trong năm bài trước. Với mỗi đoạn: gọi tên interpreter, nói bản vá đúng, và nói vì sao bản vá của interpreter khác không dùng được ở đây. Câu thứ ba là câu tính điểm.

Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để bình luận

Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.

Đăng kýĐăng nhập

Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.

Đang tải bình luận…