Language-specific formats
Định dạng ngôn ngữ-riêng — tiện một lần, kẹt mãi mãiLanguage-specific formats — handy once, stuck forever
Nhiều ngôn ngữ có sẵn cách tuần tự hóa đối tượng của riêng mình, và Kleppmann nêu đúng nhóm ấy trong danh mục tham chiếu của chương: Java Object Serialization, Ruby Marshal, Python pickle3. Chúng gọi một dòng là xong, nhưng buộc mọi bên đọc phải cùng một ngôn ngữ; việc giải mã thường kéo theo khởi tạo lớp tùy ý, mà giải tuần tự hóa dữ liệu không đáng tin là một lớp lỗ hổng đã được lập danh mục riêng — CWE-50215; và chuyện tương thích giữa các phiên bản thường bị coi là việc phụ. Kết luận của ông gọn: nói chung nên tránh, trừ những dùng rất tạm thời1.
Nhiều ngôn ngữ lập trình có nút "gói đối tượng lại" sẵn, bấm một cái là xong. Nhưng gói kiểu đó chỉ ngôn ngữ ấy mở được, lại dễ bị kẻ xấu lợi dụng khi mở gói lạ, và ít ai nghĩ tới chuyện bản cũ bản mới. Nhớ nhé: tiện nhất thời thường là kẹt lâu dài.
Many languages ship their own object serialization, and Kleppmann's chapter reference list names exactly that group: Java Object Serialization, Ruby Marshal, Python pickle3. One line of code and you're done — but every reader must then speak the same language; decoding typically instantiates arbitrary classes, and deserialization of untrusted data is a catalogued class of vulnerability — CWE-50215; and cross-version compatibility is usually an afterthought. His verdict is blunt: generally avoid them, except for very transient uses1.
Nhận ra ở đâuBất cứ chỗ nào bạn thấy một blob nhị phân trong cache, trong hàng đợi hay trong cột BLOB mà chỉ một dịch vụ viết bằng đúng một ngôn ngữ mới mở được — đó chính là cái bẫy này.
Thấy ở đâuKhi một cục dữ liệu chỉ đúng một chương trình mở được, còn ai khác nhìn vào cũng chịu — là đang dính kiểu này.
Where you see itAny binary blob in a cache, a queue or a BLOB column that only one service, in one language, can open — that is this trap.
Vì sao rủi ro bảo mật là điểm chí tử
CWE-502 mô tả đúng kịch bản: ứng dụng giải tuần tự hóa dữ liệu không đáng tin mà không kiểm tra xem dữ liệu ấy có hợp lệ hay không, mở đường cho kẻ tấn công điều khiển luồng khởi tạo đối tượng15. Với một định dạng có lược đồ tường minh, thứ duy nhất người đọc dựng lên là các trường đã khai báo trước — bề mặt tấn công hẹp hơn hẳn.
Hiệu năng và tính khả chuyển
Ngoài khóa ngôn ngữ, các cơ chế này thường không nhanh và không gọn như các định dạng chuyên dụng; danh mục tham chiếu của chương còn dẫn thẳng tới jvm-serializers, một bộ so sánh công khai giữa các thư viện tuần tự hóa trên JVM3.