Chuyển tới nội dung chính

1.12 | XXE

Số lượt xem trang

🛡 XXE Mitigation - Cách Phòng Chống XXE

Các lớp phòng chống XXE theo thứ tự ưu tiên: bỏ XML nếu được, nếu không thì khoá chặt parser.

1️⃣ Kiểm soát và xác thực đầu vào​

  • Chỉ chấp nhận dữ liệu XML từ nguồn tin cậy.
  • Kiểm tra nội dung XML trước khi xử lý.
  • Không cho phép người dùng nhập trực tiếp XML.

2️⃣ Cấu hình XML Parser để vô hiệu hóa DTD và External Entities​

Trong Java, bạn có thể tắt DTD bằng cách:

XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); // Tắt hỗ trợ DTD

Nếu không thể vô hiệu hóa hoàn toàn DTD, hãy chặn external entities:

XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); // Chặn external entities
xif.setProperty(XMLInputFactory.SUPPORT_DTD, true); // Chỉ cho phép DTD nội bộ

Lưu ý: Các thư viện XML khác nhau sẽ có cách cấu hình khác nhau. Hãy kiểm tra theo thư viện bạn đang dùng.

3️⃣ Kiểm tra Content-Type và Accept Header​

  • Chỉ chấp nhận request có Content-Type hợp lệ.
  • Nếu client gửi Accept Header không phù hợp, trả về HTTP 406 Not Acceptable.

Ví dụ trong Spring Boot (Java):

@RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = "application/xml")
public ResponseEntity<String> uploadFile(@RequestBody String xmlData) {
return new ResponseEntity<>("Received", HttpStatus.OK);
}

🔹 Chặn nếu Content-Type không phải XML.

4️⃣ Sử dụng thư viện chống XXE​

Một số thư viện hỗ trợ bảo vệ khỏi XXE:

  • OWASP Java XML Parser
  • Jackson for XML (không dùng DOM hoặc SAX trực tiếp)
  • DefusedXml (Python)
  • SafeXmlParser (.NET)

5️⃣ Dùng JSON thay vì XML nếu có thể​

Nếu ứng dụng không bắt buộc dùng XML, hãy cân nhắc sử dụng JSON, vì JSON không hỗ trợ các thực thể XML (<!ENTITY>), giảm thiểu rủi ro XXE.

🔒 Tổng kết​

✔ Kiểm tra và xác thực dữ liệu đầu vào
✔ Vô hiệu hóa DTD và External Entities trong parser
✔ Kiểm tra Content-Type và Accept Header
✔ Sử dụng thư viện XML an toàn
✔ Ưu tiên JSON thay vì XML nếu có thể

Bằng cách áp dụng các biện pháp trên, bạn có thể giảm thiểu nguy cơ bị tấn công XXE! 🚀