Nginx를 사용하여 XML 외부 엔터티 공격(XXE)으로부터 보호하는 방법

WBOY
풀어 주다: 2023-06-10 19:47:16
원래의
1599명이 탐색했습니다.

인터넷 기술의 급속한 발전으로 인해 네트워크 보안에 대한 관심이 더욱 높아지고 있습니다. 그 중 일반적인 네트워크 보안 문제는 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 엔터티를 필터링하기 위한 몇 가지 강력한 지시문을 제공합니다. 가능한 조치는 다음과 같습니다.

  1. 외부 엔터티 비활성화

XML 선언을 사용하여 외부 엔터티를 비활성화할 수 있습니다. Nginx에서는 이를 달성하기 위해 다음 지시어를 사용할 수 있습니다:

xml_disable_external_entities on;
로그인 후 복사

이 지시어는 모든 외부 엔터티의 구문 분석을 비활성화합니다.

  1. 내부 엔터티 크기 제한

공격자는 XML 문서에 많은 수의 내부 엔터티를 정의하여 서버 리소스를 소비할 수 있습니다. 따라서 다음 지시문을 사용하여 내부 엔터티의 크기를 제한할 수 있습니다.

xml_max_entity_size size;
로그인 후 복사

여기서 "size"는 바이트 단위의 크기로 설정할 수 있습니다. 내부 엔터티의 크기가 이 제한을 초과하면 요청이 거부됩니다.

  1. DTD 파싱 금지

공격자는 DTD(Document Type Definition)를 통해 XML 문서의 구조를 정의할 수 있습니다. XXE 공격으로부터 보호하기 위해 다음 지시문을 사용하여 DTD 구문 분석을 비활성화할 수 있습니다.

xml_disallow_doctype yes;
로그인 후 복사

파서가 DTD를 로드하려고 시도하면 요청이 거부됩니다.

  1. XML 파일 크기 제한

다음 명령을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿