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:
- 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.
- 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.
- 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.
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.
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…