Bir HTTPS sayfasından başka bir etki alanındaki bir HTTP sayfasına bağlantı kurabildim ve yine de aşağıdaki tekniği kullanarak ilk sayfanın URL'sini yönlendiren olarak geçebildim.
Tanımlar
Başlangıç sayfası : HTTP tarafından barındırılan hedef sayfanın bağlantısının bulunduğu HTTPS sayfası. Bu örnekte:https://example1.com/origin.html
Hedef sayfa : Başlangıç sayfasının yönlendirenine erişimi olan HTTP sayfası. Bu örnekte:http://example2.com/destination.html
Temel plan
Bunun, yönlendirmenin başlangıç sayfasının HTTP sürümünden gelmesini sağlama etkisi vardır:
HTTPS başlangıç sayfasındaki bağlantı geçerli sayfaya bağlanır, ancak hedef sayfa için bir sorgu parametresi ekler [1]. Örneğin:https://example1.com/origin.html?goto=http://example2.com/destination.html
Bağlantı tıklandığında example1.com adresindeki sunucu, 'goto' sorgu parametresi mevcut olduğunda standart isteği keser. O zaman:
- 'Goto' parametresini bir 'goto' çerezinde saklar.
- 'Goto' parametresini ve değerini geçerli isteğin URL'sinden kaldırır
- 302, kaynak etki alanının HTTP sürümündeki bu yeni temizlenmiş URL'ye yönlendirir.
http://example1.com/origin.html
Sunucu her bir 'git' çerezi isteğini kontrol eder ve varsa çerezi temizler ve çok basit bir yönlendirme sayfası oluşturur. Bu sayfa [2] içerir:
- Git çerez url'sine yönlendiren bir Javascript window.location.replace () komut dosyası.
- Goto çerez URL'sinin değeri ve birkaç saniye gecikmeli bir Meta Yenile etiketi.
- Git çerez URL'sine bir bağlantı.
notlar
[1] Bu temel çözüm açık bir yeniden yönlendiricidir ve kimlik avı saldırılarında UA'ları yeniden yönlendirmek için goto sorgu parametresini kullanarak kötü adamlara karşı korumaya dikkat edilmelidir.
[2] Bir JS yönlendirme veya meta yenileme etiketi üzerinden yönlendirirken tüm tarayıcılar yönlendireni göndermez. Benim test IE8 ve daha düşük yönlendiren geçmez.
Bu tekniğin arama motoru tarayıcılarının bağlantıları takip etmesine izin verip vermeyeceğinden emin değilim. Bu benim gereksinimlerim için önemli değil.
UA'da çerezler devre dışı bırakılmışsa, bu yalnızca başlangıç sayfasına yeniden yönlendirir.
HTTP yönlendirmelerine yalnızca yönlendirmeler için izin verme
Sunucumda, istek ne olursa olsun HTTPS'yi uygulamak için bir Apache kuralı var:
<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]
Yukarıdaki yönlendirme tekniğinin çalışması için koşullu olarak HTTP bağlantılarına izin vermenin bir yoluna ihtiyacım var. Bunu yapmanın birçok yolu var. Çerezin işe yarayacağına karar verdim.
<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]
Ctiv_ssl çerezi 2. adımda ayarlanır ve 3. adımda silinir.
Origin
Olsa kullanım örneğini uygun olmayabilir, bozulmamış olmalıdır.