Skip to content
tutorials

PHP의 20년 된 비밀이 마침내 밝혀지다

PHP의 조용한 버그가 20년 넘게 HTTPS에서 HTTP로까지 민감한 자격 증명을 유출해 왔습니다. 공식 수정안이 드디어 나왔지만, 중요한 공백으로 인해 사용자 지정 API 키는 여전히 노출될 위험이 있습니다.

Marcus Lee
PHP의 20년 된 비밀이 마침내 밝혀지다

20년 된 리다이렉트 함정

20년 동안 PHP의 미묘하지만 중대한 보안 결함이 수많은 애플리케이션을 조용히 위협해 왔습니다. 2003년부터 URL 콘텐츠를 가져오기 위해 널리 사용되는 file_get_contents 함수는 질문 없이 자동으로 HTTP 리다이렉트를 따랐습니다. 이 무해해 보이는 기능은 심각한 취약점을 만들어 의도치 않게 민감한 사용자 데이터를 노출했습니다.

스크립트가 file_get_contents를 사용하여 API에 액세스하고 Authorization header(Bearer 토큰이나 기타 자격 증명 포함)를 포함할 때, PHP는 이 헤더를 리다이렉트로 지정된 모든 새 도메인으로 맹목적으로 전달했습니다. 시스템은 새로운 목적지가 신뢰할 수 있다고 가정하고, 리다이렉트가 완전히 다른 서버를 가리키더라도 인증 세부 정보를 계속 보냈습니다.

가장 위험한 시나리오는 HTTPS에서 HTTP로의 다운그레이드였습니다. 초기 보안 요청이 암호화되지 않은 HTTP 엔드포인트로 리다이렉트되면, PHP는 여전히 민감한 토큰을 전송했습니다. 이는 원래 TLS로 보호되던 자격 증명이 네트워크를 통해 완전히 암호화되지 않은 상태로 전송되어 악의적인 공격자가 쉽게 가로챌 수 있음을 의미했습니다. 이 조용한 전달 메커니즘은 수많은 애플리케이션을 위험에 빠뜨렸습니다.

패치가 나왔지만 완벽하지는 않습니다

핵심 문제는 리다이렉트 중에 민감한 데이터를 조용히 전달하는 PHP의 방식이었습니다. 다행히 새로운 패치가 마침내 이 수십 년 된 문제를 해결하고 중요한 보안 검사를 도입했습니다. 이제 리다이렉트가 스킴(HTTP에서 HTTPS 등), 호스트 또는 포트를 변경하면 PHP는 지능적으로 Authorization 및 Cookie 헤더를 제거합니다. 이 중요한 개입은 귀하의 민감한 자격 증명이 의도치 않게 악의적일 수 있는 새로운 서버로 전달되는 것을 방지합니다.

이 중요한 보안 업데이트의 혜택을 받으려면 개발자는 PHP 설치를 즉시 업데이트해야 합니다. 이 수정 사항은 PHP 버전 8.2에서 8.5의 최신 패치 릴리스에서 사용할 수 있습니다. 업데이트를 통해 서버가 이 특정 자격 증명 유출로부터 적극적으로 보호되는 버전을 실행하도록 하여 수년간 존재해 온 중대한 보안 격차를 해소할 수 있습니다.

중요한 점은 이 패치가 모든 자격 증명 유출 시나리오를 해결하지는 않는다는 것입니다. 공식 수정안은 널리 인식되는 표준 Authorization 및 Cookie 헤더에만 적용됩니다. X-API-Key 또는 기타 맞춤형 토큰과 같이 귀하가 사용할 수 있는 모든 사용자 지정 헤더는 여전히 동일한 리다이렉트 함정에 취약합니다. 이러한 사용자 지정 자격 증명은 여전히 새 서버로 자동 전달되므로 주의 깊은 수동 처리가 필요합니다.

Guzzle이 Laravel을 구한 이유 (그리고 스스로를 보호하는 방법)

Laravel의 HTTP 클라이언트나 기반이 되는 Guzzle 라이브러리를 사용하는 많은 개발자는 이미 이 20년 된 취약점으로부터 보호받고 있었습니다. 강력한 HTTP 클라이언트인 Guzzle은 보안 우선 사고방식으로 리다이렉트를 관리합니다. 리다이렉트 시 다른 스킴, 호스트 또는 포트로 이동할 때 Authorization이나 Cookie와 같은 민감한 헤더를 맹목적으로 전달하는 것을 명시적으로 피하며, PHP의 기본 file_get_contents보다 훨씬 안전한 접근 방식을 제공합니다.

PHP의 새로운 패치(버전 8.2~8.5에서 사용 가능)는 Authorization 및 Cookie 헤더를 다루지만 모든 것을 포함하지는 않습니다. X-API-Key와 같이 전송하는 모든 사용자 지정 헤더는 리다이렉트 중에 여전히 전달되어 민감한 자격 증명이 유출될 수 있습니다. 이를 진정으로 보호하려면 file_get_contents에 대한 follow_location 컨텍스트 옵션을 false로 설정하여 PHP의 자동 리다이렉트를 비활성화해야 합니다.

자체적인 보안 리다이렉트 로직을 구현하려면 신중한 단계가 필요합니다. HTTP 응답에서 30x 상태 코드를 수동으로 검사하십시오. 리다이렉트가 발생하면 Location 헤더를 추출하여 새 URL을 가져옵니다. 중요한 점은 새로운 요청을 시작하기 전에 이 새 URL의 도메인을 신뢰할 수 있는 목록과 대조하여 검증하는 것입니다. 이 새로운 요청에서는 민감한 커스텀 헤더를 명시적으로 제외하여 자격 증명이 의도하지 않은 목적지로 전달되지 않도록 해야 합니다. 관련 수정 사항에 대한 자세한 내용은 CVE-2026-91766: PHP had the redirect credential leak curl fixed in 2018을 참조하십시오.

이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.

하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음

PHP 보안의 새로운 장

PHP에서 20년 동안 지속된 이 리다이렉트 버그는 성숙한 언어를 유지 관리하는 것이 얼마나 복잡한지에 대한 냉혹한 교훈을 줍니다. file_get_contents와 같이 수년간 깊이 내장된 핵심 기능은 언어가 발전함에도 불구하고 감지하기 어려운 미묘한 취약점을 숨기고 있을 수 있습니다. 2003년부터 존재했던 문제를 발견하고 수정하는 것은 방대하고 오래된 코드베이스 전반에서 보안을 보장하는 것이 얼마나 큰 도전인지를 보여줍니다.

"PHP는 죽었다"는 끊임없는 이야기에도 불구하고, 8.2에서 8.5 버전까지 적용된 이 중요한 수정 사항은 PHP의 활발하고 지속적인 발전을 강조합니다. Modern PHP, 특히 Laravel과 같은 강력한 프레임워크는 지속적으로 고품질의 애플리케이션을 제공하며 그 변함없는 관련성을 입증하고 있습니다. Guzzle과 같이 리다이렉트를 기본적으로 안전하게 처리하는 라이브러리를 갖춘 강력한 생태계는 종종 내장된 보호 기능을 제공합니다.

궁극적으로 PHP 커뮤니티는 이번 패치를 통해 언어를 현대화하고 보안을 강화하려는 확고한 의지를 보여주었습니다. 20년에 걸친 레거시 취약점을 해결함으로써 신뢰를 강화하고 선제적인 보안 개선을 보여주었습니다. 이러한 헌신은 PHP가 웹 개발을 위한 강력하고 관련성 높은 선택지로 남을 수 있도록 하며, 새로운 보안 환경에 끊임없이 적응하고 미래를 위한 더 강력한 기반을 구축하도록 합니다.

자주 묻는 질문(FAQ)

PHP Authorization 헤더 유출 버그란 무엇인가요?

20년 넘게 file_get_contents와 같은 PHP 함수는 HTTP 리다이렉트를 자동으로 따르고 Authorization과 같은 민감한 헤더를 새로운 목적지로 전달했습니다. 이는 리다이렉트가 다른 서버로 향하거나 보안이 적용된 HTTPS에서 보안이 취약한 HTTP로 이동할 때도 발생할 수 있었습니다.

어떤 PHP 버전에서 수정되었나요?

이 패치는 PHP 8.2, 8.3, 8.4 및 8.5 버전의 최신 릴리스에서 사용할 수 있습니다. 보호를 받으려면 각 시리즈의 최신 패치 버전으로 업데이트해야 합니다.

새로운 PHP 패치가 모든 헤더 유출을 수정하나요?

아니요. 공식 수정 사항은 도메인 간 리다이렉트 시 표준 Authorization 및 Cookie 헤더만 제거합니다. X-Api-Key와 같은 커스텀 헤더는 제거되지 않으며 여전히 유출될 수 있습니다.

Laravel이 이 PHP 버그의 영향을 받았나요?

아니요. Laravel의 기본 HTTP 클라이언트는 Guzzle을 기반으로 구축되었으며, Guzzle은 자체적인 더 안전한 리다이렉트 처리 로직을 구현합니다. Guzzle은 민감한 헤더를 다른 호스트로 전달하지 않으므로 Laravel 애플리케이션은 이 특정 문제에 취약하지 않았습니다.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only

빌더를 위해

이 페이지는 지금 다른 사람의 도구를 위해 일하고 있습니다.

AI 에이전트가 읽고, 구매자가 도착합니다. 8개 언어와 MCP로 답합니다. 당신의 도구도 가질 수 있습니다 — 24시간 안에 공개.