인터넷 기술의 급속한 발전으로 인해 네트워크 보안에 대한 관심이 더욱 높아지고 있습니다. 그 중 일반적인 네트워크 보안 문제는 XML 외부 엔터티 공격(XXE)입니다. 이 공격 방법을 통해 공격자는 악성 XML 문서를 통해 민감한 정보를 얻거나 원격 코드를 실행할 수 있습니다. 이 기사에서는 Nginx를 사용하여 XXE 공격을 방지하는 방법을 소개합니다.
1. XXE 공격이란 무엇입니까?
XML 외부 엔터티 공격은 공격자가 서버의 민감한 데이터에 접근하거나 승인되지 않은 작업을 수행할 수 있는 웹 취약점입니다. 이 공격은 악의적인 XML 문서를 구성한 다음 이를 개방형 XML 파서에 전달하여 이루어집니다. 공격자는 XML 문서에서 엔터티를 정의한 다음 외부 파일을 엔터티로 참조할 수 있습니다. XML 파서는 외부 파일에서 데이터를 로드하여 XML 문서에 삽입함으로써 공격에 성공합니다.
예를 들어 공격자는 다음과 같은 악성 XML 문서를 XML 파서에 전달할 수 있습니다.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>
위 XML 문서에서 우리는 "xxe"라는 외부 엔터티를 정의하고 이를 XML 문서의 "foo" 요소에서 참조했습니다. . 이 외부 엔터티는 실제로 공격자가 민감한 정보를 얻기 위해 구문 분석할 수 있는 "/etc/passwd" 파일에 대한 참조입니다.
2. Nginx를 사용하여 XXE 공격 방지
XXE 공격을 효과적으로 방지하기 위해 Nginx를 사용하여 들어오는 모든 XML 요청을 필터링할 수 있습니다. Nginx는 요청을 스캔하고 악의적인 XML 엔터티를 필터링하기 위한 몇 가지 강력한 지시문을 제공합니다. 가능한 조치는 다음과 같습니다.
XML 선언을 사용하여 외부 엔터티를 비활성화할 수 있습니다. Nginx에서는 이를 달성하기 위해 다음 지시어를 사용할 수 있습니다:
xml_disable_external_entities on;
이 지시어는 모든 외부 엔터티의 구문 분석을 비활성화합니다.
공격자는 XML 문서에 많은 수의 내부 엔터티를 정의하여 서버 리소스를 소비할 수 있습니다. 따라서 다음 지시문을 사용하여 내부 엔터티의 크기를 제한할 수 있습니다.
xml_max_entity_size size;
여기서 "size"는 바이트 단위의 크기로 설정할 수 있습니다. 내부 엔터티의 크기가 이 제한을 초과하면 요청이 거부됩니다.
공격자는 DTD(Document Type Definition)를 통해 XML 문서의 구조를 정의할 수 있습니다. XXE 공격으로부터 보호하기 위해 다음 지시문을 사용하여 DTD 구문 분석을 비활성화할 수 있습니다.
xml_disallow_doctype yes;
파서가 DTD를 로드하려고 시도하면 요청이 거부됩니다.
다음 명령을 사용하여 XML 파일의 크기를 제한할 수 있습니다.
client_max_body_size size;
여기서 "size"는 바이트 단위의 크기로 설정할 수 있습니다. 요청 본문의 크기가 이 제한을 초과하면 요청이 거부됩니다.
위 조치 외에도 Nginx의 "if" 판단문을 사용하여 요청에 악의적인 개체가 있는지 확인할 수도 있습니다. 예를 들어 요청에서 "xxe" 엔터티를 확인하기 위해 다음 구성을 추가할 수 있습니다.
if ($request_body ~ "xxe") { return 403; }
위 구성은 "xxe" 엔터티가 포함된 모든 요청을 차단합니다.
3. 요약
XML 외부 엔터티 공격은 일반적인 네트워크 보안 문제입니다. 이 공격으로부터 보호하기 위해 Nginx를 사용하여 들어오는 모든 XML 요청을 검사하고 악의적인 엔터티가 있는지 필터링할 수 있습니다. 위의 조치는 XXE 공격으로부터 웹 애플리케이션을 효과적으로 보호하는 데 도움이 될 수 있습니다.
위 내용은 Nginx를 사용하여 XML 외부 엔터티 공격(XXE)으로부터 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!