2010-12-22 38 views
5

HTTPS kimlik doğrulamasını zorlamanın en iyi yolunun ne olduğunu merak ediyorum. HTTPS'yi bir dizinde zorlama ve HTTPS kimlik doğrulamasını zorlama

benim .htaccess dosyasında bu var

:

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 

Kimlik çalışır, ancak açık olarak şifre göndererek, 80 numaralı bağlantı noktası üzerinde kimliğini doğrular.

Ben de eşdeğer HTTPS isteklerine tüm HTTPS olmayan isteklerini yönlendirmek için Yönlendirme Kuralı eklemek düşündüm:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteBase /~david/ 
RewriteRule ^(.*)$ https://myserver.tld/~david/$1 [R,L] 

Bu aynı zamanda çalışır, ancak 80 numaralı bağlantı noktasında ilk authenicates ardından yönlendirir, sonra tekrar authenicates Bağlantı noktası 443. Bağlantı noktası 80'de kimlik doğrulaması yapmak istemiyorum, çünkü parola açık metinde gönderilecek. Hemen HTTPS'ye yönlendirmenin ve sonra doğrulamanın iyi bir yolunu bulamadım.

<?php 

header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 

?> 

budur: benim sunucunun/'bir 403.php PHP komut dosyası

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 
ErrorDocument 403 /403.php 
SSLRequireSSL 

Ve sahip: Ben bunu nasıl anlamaya

tek yolu bunu gereğidir istenen davranış. SSL gerektirir, bu yüzden 80 numaralı bağlantı noktasındaki dizine erişmeye çalıştığınızda, özel bir hata belgesine sahiptir ve bu belgeyi sayfayı HTTPS'ye yönlendirir.

Bu kulağa benzer. Bunu başarmanın daha iyi bir yolu var mı?

+0

Sanırım doğru anladınız. Bu en iyi yol. – bmb

cevap

13

Yani, şu anda sahip olduğunuz sorun şu anda hem HTTPS hem de HTTP davası için geçerli olan veya şu anda engellediğinizdir. Bunu çözmelisiniz (aslında - 'herhangi birini tatmin edebilir' - ama bu durumda biraz dağınık).

<VirtualHost *:80> 
    ... 
    RewriteRule ^/foo/bar/?(.*)$ https://myserver.tld/foo/bar/$1 [R,L] 
    # and to guard against typo's... 
    <Directory /foo/bar/> 
     deny from all 
    </Directory> 
</VirtualHost> 


<VirtualHost *:443> 
    ... 
    <Directory /foo/bar/> 
     BasicAuth .. etc. 
     allow from all 
    </Directory> 
</VirtualHost> 

ve oradan şeyler almak:

ayıklama için kolay/yaklaşımı anlamak gibi bir yapıya gitmektir.

Dw.

İlgili konular