HTTPS 페이지에서 다른 도메인의 HTTP 페이지로의 링크를 설정하고 다음 기술을 사용하여 첫 번째 페이지의 URL을 참조 자로 전달할 수있었습니다.
정의
원본 페이지 : HTTP 호스팅 대상 페이지에 대한 링크가있는 HTTPS 페이지. 이 예에서 :https://example1.com/origin.html
대상 페이지 : 원본 페이지의 리퍼러에 액세스 할 수있는 HTTP 페이지. 이 예에서 :http://example2.com/destination.html
기본 계획
이는 HTTP 버전의 오리진 페이지에서 경로 재 지정을 수행하는 효과가 있습니다.
HTTPS 원본 페이지의 링크는 현재 페이지에 연결되지만 대상 페이지에 대한 쿼리 매개 변수를 추가합니다 [1]. 예 :https://example1.com/origin.html?goto=http://example2.com/destination.html
링크를 클릭하면 example1.com의 서버가 쿼리 매개 변수 'goto'가있을 때 표준 요청을 중단합니다. 그런 다음 :
- 'goto'매개 변수를 'goto'쿠키에 저장합니다.
- 현재 요청의 URL에서 'goto'매개 변수 및 값을 제거합니다.
- 302는 원래 도메인의 HTTP 버전에서이 새로 정리 된 URL로 리디렉션합니다.
http://example1.com/origin.html
서버는 'goto'쿠키에 대한 모든 요청을 확인하고 쿠키가 있으면 쿠키를 지우고 매우 간단한 리디렉션 페이지를 렌더링합니다. 이 페이지에는 다음이 포함되어 있습니다 [2] :
- goto 쿠키 URL로 리디렉션되는 Javascript window.location.replace () 스크립트
- goto 쿠키 URL 값이 있고 몇 초 지연되는 메타 새로 고침 태그입니다.
- goto 쿠키 URL에 대한 링크입니다.
노트
[1]이 기본 솔루션은 공개 리디렉터 이며 goto query 매개 변수를 사용하여 피싱 공격에서 UA를 리디렉션하는 나쁜 사람으로부터 보호하는 데 고려해야 할 사항이 있습니다.
[2] 모든 브라우저가 JS 리디렉션 또는 메타 새로 고침 태그를 통해 리디렉션 할 때 리퍼러를 전송하지는 않습니다. 내 테스트에서 IE8 이하는 참조자를 전달하지 않습니다.
이 기술을 통해 검색 엔진 크롤러가 링크를 따라갈 수 있는지 잘 모르겠습니다. 이것은 내 요구 사항에 중요하지 않습니다.
UA에 쿠키가 비활성화되어 있으면 원래 페이지로 다시 리디렉션됩니다.
리디렉션에만 HTTP 연결 허용
내 서버에는 요청에 관계없이 HTTPS를 시행하는 Apache 규칙이 있습니다.
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
위의 리디렉션 기술이 작동하려면 조건부로 HTTP 연결을 허용하는 방법이 필요합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 쿠키가 작동하기로 결정했습니다.
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteCond %{HTTP_COOKIE} !disable_ssl [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
disable_ssl 쿠키는 2 단계에서 설정 한 다음 3 단계에서 삭제됩니다.
Origin
하지만 사용 사례에 맞지 않을 수 있으므로, 그대로 있어야한다.