Ne yazık ki, bu sorunun tek genel çözümü kullanıcılarınıza https://
sadece vermek ve sadece bunu kullanmayı umduklarından emin olmaktır . Sonuçta, beklendiği gibi SSL / TLS kullandıklarını kontrol etmek kullanıcının sorumluluğundadır.
Web sitesi yalnızca SSL / TLS bağlantılarını kabul etse bile, diğer çözümler ortadaki adam saldırılarına karşı savunmasızdır. Saldırganlar, http://example.com
(kullanıcı tarafından istendiği gibi example.com
, o bağlantı noktasını dinlemese bile) trafiği kesebilir ve kendi bağlantısını yaparak https://example.com
kullanıcıya geri proxy göndererek değiştirebilir.
Bu nedenle otomatik yönlendirmelere karşı bir OWASP kuralı vardı . Kaldırıldı, muhtemelen yeniden yönlendirmeler riski hafifletmek için kötü bir yol değil (özellikle pasif kulak misafiri karşı), ancak temel sorunu çözmeyin.
Kullanıcıyı HTTPS sitesine yönlendirmek için kullanabileceğiniz çeşitli teknikler vardır ve bunları kullanmak kötü bir fikir değildir (ancak onları aktif MITM saldırganlarına karşı korumaz).
İlk olarak, web sunucusunda düz HTTP'de sunulması gereken hiçbir şey yoksa, bağlantı noktası 80'i kapatın (örn Listen 80
. Apache Httpd'nin yapılandırmasında kaldırın ). Kullanıcılar her zaman kullanmak zorunda kalacaklar https://
, bu da rahatsız edici olabilir.
İkinci olarak, belirli bir yol (ya Location
da Directory
) için Apache Httpd yapılandırma bölümünde , SSLRequireSSL
yönergeyi kullanın : SSL / TLS kullanımını gerektirecektir (aslında alternatif bir bağlantı noktasında yapılandırmış olsanız bile). Diğer web sunucuları muhtemelen benzer direktiflere sahiptir.
Üçüncü olarak, mod_rewrite
kodunuzu kullanarak veya kodunuz içinde (bir uygulama ise) yeniden yönlendirme kullanabilirsiniz . (Böyle bir şey Belirli bir konumu, yapmalıyım bkz HTTPS
özel değişken :; bu daha kalıcı olabilmesi için, siz de 302 kullanabilirsiniz, ancak 301 iyidir)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Daha da önemlisi, güvenli bölüme ait tüm bağlantıların kullanıldığından emin olun https://
. İşi sizin yerinize yapmak için asla otomatik yönlendirmeye güvenmeyin. Bu nedenle, geliştirme aşamasında hiç kullanmamanızı tavsiye ederim .
Ancak, hala güvenli olmayan bir şekilde web sitesine erişebildiğimi fark ettim, yani. http
yerine kullanarak https
.
Bu, hem http
ve hem de için aynı yapılandırmayı kullandığınız gibi geliyor https
. Apache Httpd kullanıyorsanız, yapılandırmayı iki ayrı VirtualHost
s'ye bölmenizi öneririm : biri 80 numaralı bağlantı noktası ve diğeri 443 numaralı bağlantı noktası için. Tam olarak aynı yapılandırmaya sahip olmaları gerekmez: sadece HTTPS için olanları koymayın HTTP sanal ana bilgisayarında.
Yukarıda belirtilen sorunları azaltmanın bir yolu , onu destekleyen tarayıcılar için HTTP Sıkı Aktarım Güvenliği'ni kullanmaktır (bildiğim kadarıyla tüm ana bilgisayar için geçerlidir). https://
Yönlendirme olmadan kullanılmazsa ilk bağlantı yine de görünebilir , ancak yine de bekleyen https://
(ve HSTS için etkinleştirilen) önceden yüklenmiş bir site listesine sahip olmak mümkündür .