[java] 자바 애플리케이션에서의 XML 외부 엔티티 공격 방어 기술

XML 외부 엔티티 공격(XXE)이란?

XML 외부 엔티티는 XML 문서 내에 정의된 외부 리소스 또는 엔티티를 참조하는 기능입니다. 하지만 이러한 외부 엔티티를 악의적으로 활용하면 보안 위협이 될 수 있습니다. 공격자는 악용된 외부 엔티티를 통해 애플리케이션 서버의 파일에 접근하거나, 내부 네트워크에 대한 정보를 탈취할 수 있습니다.

자바 애플리케이션에서의 XXE 공격 방어 방법

자바 애플리케이션에서 XXE 공격을 방어하기 위해서는 다음과 같은 접근 방법을 사용할 수 있습니다.

  1. 외부 엔티티 비활성화: XML 파서에서 외부 엔티티를 비활성화하여 외부 엔티티 참조를 차단합니다.
  2. 파싱 시 안전한 설정 사용: 안전한 XML 파싱 설정을 사용하여 외부 엔티티를 처리하지 않도록 합니다.
  3. 외부 엔티티 참조 제한: XML 문서에서 외부 엔티티를 참조하는 기능을 제한함으로써 보안을 강화합니다.

아래는 외부 엔티티 비활성화에 대한 예시 코드입니다.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

마무리

자바 애플리케이션에서의 XXE 공격은 심각한 보안 문제가 될 수 있으므로, 적절한 방어 메커니즘을 구현하는 것이 중요합니다. XML 파서 설정의 안전한 사용과 외부 엔티티 참조의 제한을 통해 XXE 공격에 대한 취약점을 방어할 수 있습니다.