NextPDF Symfony 보안 및 운영
한눈에 보기
섹션 제목: “한눈에 보기”응답 헬퍼는 고정된 보안 헤더 집합을 적용합니다. 비동기 메시지 DTO는 출력 경로를 두 번 검증합니다. 서명은 선택 사항이며, Pro 등급에서는 여기에 문서화된 베이스라인 프로파일로 제한됩니다.
HTTP 응답 보안 헤더
섹션 제목: “HTTP 응답 보안 헤더”NextPDF\Symfony\Http\PdfResponse는 자신이 빌드하는 모든 응답(인라인, 다운로드, 두 가지 스트리밍 변형)에 동일한 헤더 집합을 적용합니다. 소스 상수와 대조해 검증한 정확한 헤더는 다음과 같습니다.
| 헤더 | 값 |
|---|---|
Cache-Control | private, max-age=0, must-revalidate |
Pragma | public |
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
이 헤더들은 생성된 문서의 content-type 스니핑, 프레이밍, 인덱싱 및 리퍼러 유출을 줄입니다. 버퍼링된 변형은 추가로 Content-Type: application/pdf와 Content-Length를 설정합니다. 스트리밍 변형은 콘텐츠 유형은 설정하지만 설계상 Content-Length는 생략합니다.
헤더 집합은 번들에 의해 고정됩니다. 헤더를 추가하거나 변경하려면(예: 인증된 다운로드에 더 엄격한 Cache-Control 적용), 반환할 Response를 컨트롤러에서 미리 변경하십시오.
Content-Disposition 및 파일 이름 처리
섹션 제목: “Content-Disposition 및 파일 이름 처리”PdfResponse는 Content-Disposition 헤더를 방어적으로 빌드하며, 이는 PdfResponseTest와 대조해 검증되었습니다.
- 파일 이름은 정화되고, 경로 구분자와 순회 시퀀스는 제거됩니다(
../../../etc/passwd.pdf같은 파일 이름은 빠져나갈 수 없습니다). - 파일에
.pdf확장자가 없으면 추가되며, 대문자.PDF를 포함해 기존 확장자는 중복되지 않습니다. - 큰따옴표와 백슬래시는 따옴표로 감싼 문자열 형식에 맞게 이스케이프됩니다.
- ASCII가 아닌 파일 이름에는 ASCII 폴백 및 RFC-5987
filename*=UTF-8''변형이 제공됩니다. - 빈 파일 이름은
document.pdf로 폴백됩니다.
사용자의 영향을 받을 수 있는 파일 이름은 애플리케이션 수준의 권한 검사를 거친 후에만 전달하십시오. 번들은 접근 제어가 아니라 헤더 안전성을 위해 파일 이름을 정화합니다.
비동기 출력 경로 검증
섹션 제목: “비동기 출력 경로 검증”NextPDF\Symfony\Message\GeneratePdfMessage는 생성자에서 출력 경로를 검증하고, NextPDF\Symfony\Message\GeneratePdfHandler는 쓰기 전 실행 시점에 다시 검증합니다. 생성 시점에 검증되는 거부 규칙은 다음과 같습니다.
- 빈 경로 또는 널 바이트를 포함하는 경로
- 예를 들어
php://...같은 스트림 래퍼 스킴. - 경로에
..순회 세그먼트가 있고,/또는\구분자를 사용함. - 경로가
.pdf로 끝나지 않음(대소문자 구분 없음). - 지정된
builderClass가 구문상 유효한 클래스 이름이 아님.
메시지는 디스패치와 소비 사이에 큐에 저장될 수 있으므로 핸들러의 두 번째 검증이 중요합니다. 핸들러는 큐에 들어간 경로를 신뢰하지 않으며, 저장하기 전에 경로 가드를 다시 적용합니다. 워커는 의도한 출력 디렉터리로 범위가 한정된 최소 권한 파일 시스템 계정으로 실행하십시오.
빌더 해석 경계
섹션 제목: “빌더 해석 경계”GeneratePdfHandler는 클래스 이름을 키로 하는 PSR-11 서비스 로케이터에서 빌더를 해석하며, PdfBuilderInterface가 아닌 것은 모두 거부합니다. 로케이터는 등록된 빌더만 노출하므로, 변조된 전송 페이로드에서 공격자가 제어하는 builderClass는 임의의 클래스를 인스턴스화할 수 없습니다. PSR-11에서는 컨테이너가 id가 존재하지 않는다고 보고하면, 예상치 못한 무언가를 조용히 반환하는 대신 해석이 실패합니다(PSR-11 §1.1.2). 로케이터에는 신뢰할 수 있는 빌더 클래스만 등록하십시오.
선택적 디지털 서명 태세
섹션 제목: “선택적 디지털 서명 태세”디지털 서명은 코어 번들의 일부가 아닙니다. 서명은 nextpdf/premium(Pro 등급 설치)이 존재하고 컴파일러 패스가 Pro 서명 클래스를 감지할 때만 활성화됩니다. 번들과 Pro 등급이 설치되면, 지원되고 문서화된 서명 구성은 베이스라인 B-B 프로파일입니다.
구성 signature.level 노드는 NextPDF 구성 제품군 전반의 스키마 호환성을 위해 추가 문자열 값을 허용합니다. 이 번들이 제공하고 지원하는 서명 기능은 B-B입니다. B-B를 넘어서는 서명 프로파일, 해당 요구 사항 및 운영 고려 사항은 NextPDF Premium 문서에 기술되어 있으며 여기에서는 의도적으로 설명하지 않습니다.
B-B 서명 경로에 대한 운영 참고 사항은 다음과 같습니다.
- 서명자는 오직
signature.enabled가 true이고 또한signature.certificate가 설정된 경우에만 등록됩니다. 그렇지 않으면 해당 섹션은 비활성 상태입니다. - 인증서, 개인 키 및 비밀번호는 Symfony 시크릿이나 환경 변수를 통해 제공하고, 저장소에 커밋하지 마십시오.
- 키 자료에 대한 읽기 권한은 애플리케이션 계정으로 제한하십시오.
선택적 로깅
섹션 제목: “선택적 로깅”글꼴 및 이미지 레지스트리는 선택적 Psr\Log\LoggerInterface를 허용하며, 이는 nullOnInvalid()로 바인딩됩니다. 존재하는 경우 해당 로거는 PSR-3 로거 계약(PSR-3)에 따른 교체 가능한 협력자입니다. 문서 생성 과정에 추가하는 모든 로그 컨텍스트에서는 사용자 식별 데이터를 제거하십시오. 번들은 문서 내용을 로깅하지 않습니다.
운영 강화 체크리스트
섹션 제목: “운영 강화 체크리스트”- 고정된 응답 헤더를 유지하고, 인증된 다운로드에는 컨트롤러에서 더 엄격한 캐싱을 계층화하십시오.
- 문서를 생성하거나 반환하기 전에 요청을 인가하십시오. 번들은 접근 제어를 수행하지 않습니다.
- 서명 키 자료는 최소 권한 파일 권한을 적용해 Symfony 시크릿 / 환경 변수에 저장하십시오.
- Messenger 워커는 출력 디렉터리에 대한 쓰기 접근으로 범위가 제한된 최소 권한 계정으로 실행하십시오.
- 확장 모듈
ext-mbstring와ext-zlib를 활성화 상태로 유지하십시오(그렇지 않으면 번들이 빠르게 실패합니다). - 애플리케이션에서 단일
nextpdf/core메이저 버전을 고정하여 배포 전반의 엔진 버전을 결정적으로 만드십시오.
적합성
섹션 제목: “적합성”각 행은 이 페이지에서 제시하는 규범적 주장으로, 게이트된 SDO 코퍼스의 전체 64자리 16진수 reference_id에 고정되어 있습니다. 출처(코퍼스 매니페스트, 검색 전송)는 _sidecars/rag-citations.yaml에 있습니다.
| 사양 | 조항 | reference_id 식별자 | 주장 |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p5 | has()가 false이면 get()가 NotFoundException을 던진다는 의미 | |
| PSR-3 | psr_3_logger#x3.p17 | 선택적 로거 협력자 |
상업적 컨텍스트
섹션 제목: “상업적 컨텍스트”디지털 서명은 nextpdf/premium(Pro)가 설치된 경우에만 사용할 수 있습니다. 이 번들이 제공하는 프로파일은 베이스라인 B-B입니다. 이는 선택적 Pro 기능입니다. 여기에 문서화된 Core 번들에서는 이를 채택하는 데 코드 변경이 필요하지 않습니다. </get-license/?를 참조하십시오.intent=symfony-pro>.
함께 보기
섹션 제목: “함께 보기”- /integrations/symfony/production-usage/ — 워커 안전성 및 스트리밍.
- /integrations/symfony/configuration/ — signature, tsa 및 서비스 테이블.
- /integrations/symfony/troubleshooting/ — 서명 및 Messenger 문제 진단.
- /integrations/symfony/integration/ — 종단 간 연결 레퍼런스.