답변:
불행하게도,이 문제에 대한 유일한 해결책은 사용자 https://
에게만 제공하고 사용하도록 기대 하는 것입니다. SSL / TLS를 사용하고 있는지 확인하는 것은 궁극적으로 사용자의 책임입니다.
웹 사이트가 SSL / TLS 연결 만 허용하더라도 다른 솔루션은 MITM (Man-in-the-Middle) 공격에 취약합니다. 공격자는 http://example.com
( example.com
포트에서 수신 대기하지 않더라도 사용자가 요청한대로) 트래픽을 가로 채고 자신에게 연결 https://example.com
하여 사용자에게 다시 프록시 하여 트래픽을 교체 할 수 있습니다.
이로 인해 자동 리디렉션 에 대한 OWASP 규칙 이있었습니다. 경로 재 지정이 위험을 완화하는 나쁜 방법은 아니지만 (특히 수동 도청 자에 대한) 방법은 아니지만 근본적인 문제를 해결하지는 못했을 것입니다.
사용자를 HTTPS 사이트로 안내하는 데 사용할 수있는 다양한 기술이 있으며이를 사용하는 것은 좋지 않습니다 (활성 MITM 공격자로부터 사용자를 보호하지는 않지만).
첫째, 웹 서버에 일반 HTTP로 제공해야 할 것이 없다면 포트 80을 끄십시오 (예 : Listen 80
Apache Httpd의 구성에서 제거 ). 사용자는 https://
항상 사용해야 하므로 불편할 수 있습니다.
둘째, 특정 경로 ( Location
또는 Directory
) 에 대한 Apache Httpd 구성 섹션 에서 SSLRequireSSL
지시문을 사용하십시오 : SSL / TLS를 사용해야합니다 (실제로 다른 포트에서 구성한 경우에도). 다른 웹 서버에는 비슷한 지시문이있을 수 있습니다.
셋째, mod_rewrite
코드를 사용 하거나 코드 내에서 (응용 프로그램 인 경우) 리디렉션을 사용할 수 있습니다 . 특정 위치에 대해 이와 같은 작업을 수행해야합니다 ( 특수 변수 참조HTTPS
; 302도 사용할 수 있지만 더 영구적 인 경우 301이 좋습니다).
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
더 중요한 것은 해당 보안 섹션에 대한 모든 링크가 사용되는지 확인하십시오 https://
. 자동 리디렉션을 사용하여 작업을 수행하지 마십시오. 따라서 개발 단계에서는 전혀 사용하지 않는 것이 좋습니다 .
그러나 나는 여전히 웹 사이트에 비보안 적으로 액세스 할 수 있음을 알아 차렸다.
http
대신 에 사용하여https
.
당신이 모두 동일한 구성 사용하는 것처럼 이것은 또한 소리 http
와 https
. Apache Httpd를 사용하는 경우 구성 VirtualHost
을 포트 80 용과 포트 443 용의 두 가지로 나눌 것을 제안합니다 . 정확히 동일한 구성을 가질 필요는 없습니다. HTTPS에만 해당하는 것을 넣지 마십시오. HTTP 가상 호스트에서.
위에서 언급 한 문제를 완화하는 방법은 HTTP Strict Transport Security 를 지원하는 브라우저에 사용하는 것입니다 (내가 아는 한 전체 호스트에 적용됨). https://
리디렉션없이 사용하지 않으면 첫 번째 연결이 계속 노출 될 수 있지만 미리로드 된 사이트 목록이있을 수 있습니다 https://
(HSTS 사용 가능).
https://mail.google.com
. 사용자 http://mail.google.com
가을 (를) 사용하는 것으로 보이면 MITM에 요청을 프록시하는 MITM이있을 수 https://mail.google.com
있습니다. 안타깝게도 사용자가 확인하지 않으면 Gmail에서 그 일을 많이 할 수 없습니다. 실제와 동일한 원리 : Alice가 Bob과 대화하고 싶지만 ID를 확인하지 않고 척 (Bob이라고 주장하는 사람)과 대화하는 경우 Bob은이 대화에 대해 알지 못하므로 수행 할 수 없습니다. 그것에 대해 무엇이든. 앨리스의 책임입니다.
http 트래픽을 https로 리디렉션하기 만하면됩니다. 이 기사 'http를 https로 Apache 보안 연결로 리디렉션 – 강제 HTTPS 연결'을 참조하십시오 .
A의 하위 디렉토리 디렉토리 자체에 htaccess로 파일이 배치합니다.
RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L]
사이트를 MITM, 스 누퍼 및 PEBKAC로 만드는 데 필요한 단계 외에 HTTPS를 통한 액세스가 실제로 가능합니다. 작동하지 않는 사용자의 책임이어서 는 안됩니다 . 사용자가 보안 브라우저를 대신 사용하도록 권장하십시오.
HTTPS 강제 실행은 HSTS ( HTTP Strict-Transport-Security )를 통해 수행됩니다 . 기본 HSTS는 사용자가 HTTPS를 통해 사이트에 처음 액세스 한 후에 안전합니다 (모든 지원되는 브라우저에서 IE에는 기능이 없음 ). 사전로드 된 HSTS 는 항상 안전하며 최신 빠른 릴리스 브라우저 (Chromium 및 파생 상품, Firefox)를 포함합니다.
HTTP 보안 (주소 지정 URL, 리디렉션, 쿠키 및 혼합 컨텐츠)에 대한 전체 개요는 이 HTTPS 마이그레이션 하우투를 참조하십시오 . HSTS는 점진적 마이그레이션의 마지막 단계입니다. 귀하의 사이트가 새로운 사이트라면 주문을 따를 필요가 없습니다.
관련 표준 : 보안 쿠키 (쿠키가 HSTS 헤더보다 오래 지속되는 경우 중요), HttpOnly 쿠키 ( 쿠키를 보호하는 동안), HPKP (현대 브라우저 및보다 풍부한 공격자 용).