이것을하는 유일한 안전한 방법
이 페이지의 다른 모든 답변에는 알아야 할 보안 관련 사항이 있습니다.
현재 도메인을 검색 할 수있는 유일한 안전한 방법
하는 것입니다 𝓪 𝓼𝓮𝓬𝓾𝓻𝓮 𝓵𝓸𝓬𝓪𝓽𝓲𝓸𝓷의 𝔂𝓸𝓾𝓻𝓼𝓮𝓵𝓯 𝓲𝓷 𝓲𝓽을 𝓼𝓽𝓸𝓻𝓮.
대부분의 프레임 워크는 도메인 저장을 담당하므로 특정 프레임 워크에 대한 설명서를 참조하십시오. 프레임 워크를 사용하지 않는 경우 다음 위치 중 하나에 도메인을 저장하십시오.
+ ------------------------------------------------- --- + ----------------------------------- +
| 안전한 도메인 저장 방법 | 사용하는 사람 |
+ ------------------------------------------------- --- + ----------------------------------- +
| 구성 파일 | Joomla, Drupal / Symfony |
| 데이터베이스 | 워드 프레스 |
| 환경 변수 | 라 라벨 |
| 서비스 레지스트리 | 쿠 버네 티스 DNS |
+ ------------------------------------------------- --- + ----------------------------------- +
다음을 사용할 수는 있지만 안전하지 않습니다.
해커는 이러한 변수를 원하는 도메인으로 출력 할 수 있습니다. 이는 캐시 중독 및 간신히 눈에 띄는 피싱 공격으로 이어질 수 있습니다.
$_SERVER['HTTP_HOST']
이것은 해커가 조작 할 수 있는 요청 헤더에서 도메인을 가져옵니다 . 와 같다:
$_SERVER['SERVER_NAME']
이 설정은 Apache 설정 usecanonicalname 을 끄면 더 좋아질 수 있습니다 . 이 경우 $_SERVER['SERVER_NAME']
더 이상 임의의 값으로 채워질 수 없으며 안전합니다. 그러나 이것은 기본값이 아니며 일반적인 설정이 아닙니다.
대중적인 시스템에서
다음은 다음 프레임 워크 / 시스템에서 현재 도메인을 얻는 방법입니다.
워드 프레스
$urlparts = parse_url(home_url());
$domain = $urlparts['host'];
WordPress에서 URL을 구성하는 경우 home_url 또는 site_url 또는 다른 URL 함수를 사용하십시오 .
라 라벨
request()->getHost()
이 request()->getHost
기능은 Symfony에서 상속되었으며 2013 CVE-2013-4752 가 패치 된 이후 안전합니다 .
드루팔
설치 관리자는 아직이 보안을 수행하지 않습니다 ( 문제 # 2404259 ). 그러나 Drupal 8에는 신뢰할 수있는 호스트 설정 에 따라 Drupal 설치를 보호 한 후 다음을 사용할 수있는 설명서가 있습니다.
\Drupal::request()->getHost();
다른 프레임 워크
선호하는 프레임 워크에서 현재 도메인을 얻는 방법을 포함하도록이 답변을 자유롭게 편집하십시오. 그렇게 할 때 관련 소스 코드 또는 프레임 워크가 안전하게 작업하고 있는지 확인하는 데 도움이되는 다른 링크를 포함 시키십시오.
추가
착취 사례 :
봇넷이 잘못된 호스트 헤더를 사용하여 페이지를 지속적으로 요청하면 캐시 포이즈 닝이 발생할 수 있습니다. 결과 HTML에는 공격자 웹 사이트에 대한 링크가 포함되어 사용자를 피싱 할 수 있습니다. 처음에는 악의적 인 링크가 해커에게만 다시 전송되지만 해커가 요청을 충분히 수행하면 악의적 인 버전의 페이지가 다른 사용자에게 배포되는 캐시에 남게됩니다.
호스트 헤더를 기반으로 데이터베이스에 링크를 저장하면 피싱 공격이 발생할 수 있습니다. 예를 들어 포럼의 사용자 프로필에 대한 절대 URL을 저장한다고 가정 해 봅시다. 해커는 잘못된 헤더를 사용하여 프로필 링크를 클릭하는 모든 사람이 피싱 사이트를 받도록 할 수 있습니다.
해커가 다른 사용자의 비밀번호 재설정 양식을 작성할 때 악의적 인 호스트 헤더를 사용하는 경우 비밀번호 재설정 중독이 발생할 수 있습니다. 그러면 해당 사용자는 피싱 사이트로 연결되는 비밀번호 재설정 링크가 포함 된 이메일을받습니다.
좀 더 악의적 인 예가 있습니다.
추가주의 사항 및 참고 사항 :
- 때 낸다 UseCanonicalName가 꺼집니다이
$_SERVER['SERVER_NAME']
같은 헤더로 채워집니다 $_SERVER['HTTP_HOST']
어쨌든 사용하는 것 (플러스 포트). 이것은 Apache의 기본 설정입니다. 당신이나 devops가 이것을 켜면 괜찮습니다-ish-그러나 당신은 실제로 다른 팀이나 앞으로 3 년 동안 사소한 구성으로 보이는 것을 유지하기를 원합니까? -기본값? 이렇게하면 보안이 강화되지만이 설정에 의존하지 않도록주의해야합니다.
- 그러나 Redhat은 기본적으로 usecanonical을 설정합니다 [ source ].
- 경우 는 ServerAlias가 가상 호스트 항목에 사용하고, 별칭 도메인을 요청,
$_SERVER['SERVER_NAME']
현재 도메인을 반환하지 않습니다,하지만 SERVERNAME 지시어의 값을 반환합니다.
- serverName을 확인할 수 없으면 운영 체제의 호스트 이름 명령이 [source] 위치에 사용됩니다 .
- 호스트 헤더가 없으면 서버는 usecanonical이 [source] 에있는 것처럼 작동합니다 .
- 마지막으로 로컬 서버 에서이 문제를 악용하려고 시도했지만 호스트 헤더를 스푸핑 할 수 없었습니다. 이 문제를 해결 한 Apache 업데이트가 있는지 또는 내가 잘못한 것이 확실하지 않습니다. 그럼에도 불구하고이 헤더는 가상 호스트를 사용하지 않는 환경에서 여전히 악용 될 수 있습니다.
리틀 랜트 :
이 질문은 당면한 보안 문제에 대한 언급없이 수십만 건의 견해를 받았습니다! 이 방법이 아니어야하지만 스택 오버플로 응답이 널리 사용된다고해서 이것이 안전하다는 의미는 아닙니다.