Mô-đun xử lý XML¶
Source code: Lib/xml/
Các giao diện của Python để xử lý XML được nhóm trong gói xml.
Ghi chú
Nếu bạn cần phân tích dữ liệu không đáng tin cậy hoặc chưa được xác thực, hãy xem bảo mật XML.
Điều quan trọng cần lưu ý là các mô-đun trong gói xml yêu cầu phải có ít nhất một trình phân tích cú pháp XML tương thích với SAX. Trình phân tích cú pháp người nước ngoài được bao gồm trong Python, vì vậy mô-đun xml.parsers.expat sẽ luôn khả dụng.
Tài liệu về các gói xml.dom và xml.sax là định nghĩa về các ràng buộc Python cho giao diện DOM và SAX.
Các mô-đun con xử lý XML là:
xml.etree.ElementTree: ElementTree API, bộ xử lý XML đơn giản và nhẹ
xml.dom: định nghĩa DOM APIxml.dom.minidom: triển khai DOM tối thiểuxml.dom.pulldom: hỗ trợ xây dựng cây DOM một phần
xml.sax: các lớp cơ sở SAX2 và các hàm tiện lợixml.parsers.expat: liên kết trình phân tích cú pháp người nước ngoài
bảo mật XML¶
Kẻ tấn công có thể lạm dụng các tính năng của XML để thực hiện các cuộc tấn công từ chối dịch vụ, truy cập các tệp cục bộ, tạo kết nối mạng đến các máy khác hoặc phá vỡ tường lửa khi XML do kẻ tấn công kiểm soát đang được phân tích cú pháp, bằng Python hoặc ở nơi khác.
Trình phân tích cú pháp XML tích hợp của Python dựa vào thư viện libexpat, thường được gọi là Expat, để phân tích cú pháp XML.
Theo mặc định, bản thân Expat không truy cập các tệp cục bộ hoặc tạo kết nối mạng.
Các phiên bản nước ngoài thấp hơn 2.7.2 có thể dễ bị tổn thương trước các lỗ hổng "tỷ tiếng cười", "bùng nổ bậc hai" và "mã thông báo lớn" hoặc sử dụng bộ nhớ động không cân xứng. Python gói một bản sao của Expat và việc Python sử dụng gói Expat hay trên toàn hệ thống phụ thuộc vào cách trình thông dịch Python has been configured trong môi trường của bạn. Python có thể dễ bị tấn công nếu sử dụng các phiên bản Expat cũ hơn. Kiểm tra pyexpat.EXPAT_VERSION.
xmlrpc là vulnerable tấn công "bom giải nén".
- tỷ tiếng cười / mở rộng thực thể theo cấp số nhân
Cuộc tấn công Billion Laughs -- còn được gọi là mở rộng thực thể theo cấp số nhân - sử dụng nhiều cấp độ của các thực thể lồng nhau. Mỗi thực thể đề cập đến một thực thể khác nhiều lần và định nghĩa thực thể cuối cùng chứa một chuỗi nhỏ. Việc mở rộng theo cấp số nhân dẫn đến vài gigabyte văn bản và tiêu tốn nhiều bộ nhớ cũng như thời gian CPU.
- mở rộng thực thể bậc hai
Cuộc tấn công nổ tung bậc hai tương tự như cuộc tấn công Billion Laughs; nó cũng lạm dụng việc mở rộng thực thể. Thay vì các thực thể lồng nhau, nó lặp đi lặp lại một thực thể lớn với vài nghìn ký tự. Cuộc tấn công không hiệu quả như trường hợp hàm mũ nhưng nó tránh kích hoạt các biện pháp đối phó của trình phân tích cú pháp nhằm cấm các thực thể được lồng sâu.
- bom giải nén
Bom giải nén (còn gọi là ZIP bomb) áp dụng cho tất cả các thư viện XML có thể phân tích các luồng XML đã nén, chẳng hạn như luồng HTTP được nén bằng gzipped hoặc các tệp nén LZMA. Đối với kẻ tấn công, nó có thể giảm lượng dữ liệu được truyền đi từ ba độ lớn trở lên.
- token lớn
Người nước ngoài cần phân tích lại các mã thông báo chưa hoàn thành; không có biện pháp bảo vệ được giới thiệu trong Expat 2.6.0, điều này có thể dẫn đến thời gian chạy bậc hai có thể được sử dụng để gây ra tình trạng từ chối dịch vụ trong quá trình phân tích cú pháp ứng dụng XML. Vấn đề được gọi là CVE 2023-52425.