SSL bağlantısı olmadan web sitesine erişim nasıl engellenir?


11

SSL sertifikası yüklü bir web sitem var, böylece web sitesine erişim httpsyerine kullanarak erişirsem httpgüvenli bir bağlantı kullanarak bağlanabiliyorum.

Ancak, hala güvenli olmayan bir şekilde web sitesine erişebildiğimi fark ettim, yani. httpyerine kullanarak https.

Kullanıcıların web sitesini güvenli olmayan bir şekilde kullanmalarını nasıl önleyebilirim?

Web sitesinde bir dizin varsa, örneğin. samples/, yalnızca bu dizine güvenli olmayan bağlantıları önleyebilir miyim?

Yanıtlar:


12

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.comkullanı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 Locationda Directory) için Apache Httpd yapılandırma bölümünde , SSLRequireSSLyö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_rewritekodunuzu 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. httpyerine kullanarak https.

Bu, hem httpve hem de için aynı yapılandırmayı kullandığınız gibi geliyor https. Apache Httpd kullanıyorsanız, yapılandırmayı iki ayrı VirtualHosts'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 .


İyi bilgi, gmail bunu nasıl yapıyor? - https'yi zorladıkları şeylere bakıldığında.
toomanyairmiles

3
Yeniden yönlendirme kullanıyorlar. Kullanıcı beklediğinden, bu iyi çalışır https://mail.google.com. Bir kullanıcı olarak bunun işe yaradığını görürseniz http://mail.google.com, büyük olasılıkla orijinal istekleri proxy olarak alan bir MITM vardır https://mail.google.com. Maalesef, kullanıcılar kendileri kontrol etmezse Gmail bu konuda fazla bir şey yapamaz. Gerçek hayatta olduğu gibi aynı prensip: Alice Bob'la konuşmak istiyor, ancak kimliği doğrulamak yerine Chuck'la (Bob olduğunu iddia eden) konuşuyor, Bob bu konuşmayı bilmeyecek ve yapamayacak bunun hakkında herhangi bir şey. Alice'in sorumluluğu.
Bruno

HTTPS ile bağlı olup olmadığını doğrulayacak ve HTTPS adresine SSL kullanmıyorsa yönlendirme yapacak bazı PHP komut dosyaları gördüm. Bu, elbette, sitenizi şimdi oluşturmuyorsanız kolay bir iş değildir.
Anonim Penguen

@AnnonomusPerson, bu tamamen aynı prensiptir ve HTTP'den HTTPS'ye yeniden yazma kuralının yaptığı şey budur. Programlı olarak veya yapılandırma yoluyla yapsanız da önemli değil, yine de aynı sorunu sunan düz HTTP'de ilk istekle bir yönlendirme.
Bruno

3

Tek yapmanız gereken http trafiğini https'ye yönlendirmektir - 'http'yi https'ye yönlendir Apache güvenli bağlantı - HTTPS Bağlantılarını Zorla' başlıklı makaleye bakın .

Bir alt dizin için bunu dizinin kendisindeki bir htaccess dosyasına yerleştirin.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 

Bunu sadece belirli alt dizinler için yapabilir misiniz?
CJ7

@CraigJ üzgünüm, alt dizin bölümünü kaçırdı, cevap güncellendi.
toomanyairmiles

3
Bu riskleri biraz azaltırken, aktif MITM saldırganlarına karşı işe yaramıyor.
Bruno

0

HTTPS aracılığıyla erişimi zorlamak aslında sitenizi MITM, snooper ve PEBKAC geçirmez hale getirmek için gerekli bir adım olmanın yanı sıra mümkündür. Kullanıcının sorumluluğu olmamalı, işe yaramıyor . Kullanıcılarınızı bunun yerine güvenli tarayıcılar kullanmaya teşvik edin.

HTTPS'yi zorlamak HSTS ( HTTP Strict-Transport-Security ) yoluyla yapılır . Temel HSTS, kullanıcı sitenize HTTPS üzerinden ilk kez eriştikten sonra güvenlidir (tüm desteklenen tarayıcılarda; IE yeteneği yoktur ). Önceden yüklenmiş HSTS her zaman güvenlidir ve modern hızlı açılan tarayıcıları (Chromium ve türevleri, Firefox) kapsar.

HTTP güvenliğine (URL'leri, yönlendirmeleri, çerezleri ve karışık içeriği adresleme) daha eksiksiz bir genel bakış için bu HTTPS geçişi nasıl yapılır bölümüne bakın . HSTS, aşamalı bir göçün son adımıdır. Siteniz yepyeni ise siparişi takip etmeniz gerekmez.

İlgili standartlar: güvenli çerezler (çerezleriniz HSTS başlığından daha uzun yaşıyorsa önemlidir), HttpOnly çerezleri ( çerezlerinizi korurken), HPKP (modern tarayıcılar ve daha becerikli saldırganlar için).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.