Program Tip

HTTPS에서만 .htaccess에서 HSTS 헤더를 설정하는 방법

programtip 2020. 11. 1. 18:34
반응형

HTTPS에서만 .htaccess에서 HSTS 헤더를 설정하는 방법


내 웹 애플리케이션은 내가 제어하는 ​​다른 수의 호스트에서 실행됩니다. 각 가상 호스트의 Apache 구성을 변경할 필요를 방지하기 위해 내 저장소에 .htaccess 파일을 사용하여 대부분의 구성을 추가하므로 각 호스트의 기본 설정이 몇 줄이면됩니다. 또한 새 버전을 배포 할 때 구성을 변경할 수 있습니다. 현재 .htaccess (un)는 헤더를 설정하고 일부 재 작성 마법을 수행하며 UA의 캐싱을 제어합니다.

.htaccess를 사용하여 응용 프로그램에서 HSTS를 활성화하고 싶습니다. 헤더 설정은 간단합니다.

Header always set Strict-Transport-Security "max-age=31536000"

그러나 사양에는 "HSTS 호스트는 비보안 전송을 통해 전달되는 HTTP 응답에 STS 헤더 필드를 포함해서는 안됩니다."라고 명시되어 있습니다. 따라서 HTTP 연결을 통해 헤더를 보낼 때 헤더를 보내고 싶지 않습니다. http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14를 참조하세요 .

환경 변수를 사용하여 헤더를 설정하려고했지만 거기에 갇혀있었습니다. 그 방법을 아는 사람?


쉽게 사용할 수있는 HTTPS 환경 변수가 분명히 있습니다. 같은 질문을 가진 사람들의 경우 :

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

nielsr의 답변을 구축하기 위해 .htaccess에서 다음을 사용 하여 도메인을 Chrome 브라우저로 하드 코딩하는 https://hstspreload.org 의 보안 배포 권장 사항을 충족했습니다 . 이렇게하면 하위 도메인 전체에 HSTS가 적용되며 사전로드 목록에 포함하는 것은 쉽게 취소 할 수 없으므로 rtfm.

<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>

위해 httpd.conf(당신이 편집이을에 대한 액세스 권한이있는 경우) 당신은 사용할 수 있습니다

<VirtualHost 65.81.122.43:443>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
</VirtualHost>

참고 : HTTPS 가상 호스트에서만 설정해야하며 http 가상 호스트에는있을 수 없습니다.

.htaccess 파일은 언제 사용해야하며 사용하지 않아야합니까?

.htaccess 파일을 허용하면 Apache가 서버에 액세스 할 때마다 해당 파일을 찾습니다. 상위 디렉토리도 검색되기 때문에 약간의 시간이 걸리며 서버 성능에 영향을 미칠 수 있습니다. 출처


이것을 사용하고 https://hstspreload.org 를 준수하기 위해 htaccess 파일에 넣을 수 있습니다 . .htaccess 파일에 넣으십시오.

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L,E=HTTPS:1]
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

먼저 https가 아닌 경우 https로 리디렉션합니다. www가 아닌 ​​https를 HSTS 헤더를 사용하여 www https로 리디렉션합니다.

( http://example.com -> https://example.com -> https://www.example.com -와 HSTS 헤더)

https://hstspreload.org 테스트 및 준수


또 다른 대안은 항상 헤더를 설정하고 비 SSL 연결에 대해 조건부로 제거하는 것입니다.

Header always set   Strict-Transport-Security "max-age=31536000" early
Header        unset Strict-Transport-Security env=!HTTPS

이것은 Header지시문이 env조건과 early플래그 모두와 함께 사용될 수 있다는 장점이 있습니다 . 하나와 Header지시어 envearly함께 사용할 수 없습니다, 그들은 (공식 문서를 참조 상호 배타적 https://httpd.apache.org/docs/current/mod/mod_headers.html#header을 ).

참고 URL : https://stackoverflow.com/questions/24144552/how-to-set-hsts-header-from-htaccess-only-on-https

반응형