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
지시어 env
와 early
함께 사용할 수 없습니다, 그들은 (공식 문서를 참조 상호 배타적 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
'Program Tip' 카테고리의 다른 글
'int main () {return (0);의 부동 소수점 예외 (SIGFPE) (0) | 2020.11.01 |
---|---|
git이 내 파일이 변경되었음을 인식하지 못하여 git add가 작동하지 않는 이유 (0) | 2020.11.01 |
NetBeans 6.8에서 모든 중단 점을 제거하려면 어떻게해야합니까? (0) | 2020.11.01 |
메서드 내에서 변수 대신 const를 사용할 때의 이점 (0) | 2020.11.01 |
Javadoc에서 여러 수준의 들여 쓰기를 만드는 방법은 무엇입니까? (0) | 2020.11.01 |