2012-02-03 13 views
5

i bir oturum açma formu var.Sayfayı php'de https'ye nasıl yönlendirirsiniz?</p> <pre><code><form method =POST action="/login.php"> ... </form> </code></pre> <p>i <code>login.php</code> sayfa <code>https</code> kullanarak yönlendirme yapmak istiyorum:

Bağlantıyı değiştirebilecekleri için kullanıcıyı https://.../login.php adresine göndermek istemiyorum. . Ama ben buldum ve örnek

i giriş formu verilerini ayrıştırmak ve kullanıcıyı log önce sunucu tarafında bir yönlendirme yapmak istiyorum:

if($_SERVER["HTTPS"] != "on") { 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: "https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]); 
    exit(); 
} 

ama eğer ben $_SERVER["HTTPS"] yok ben var_dump($_SERVER);

i $_SERVER['SERVER_PORT'] cadı 80.

herhangi bir fikir olduğunu var mı?

teşekkürler giriş bilgileri zaten internet üzerinden düz metin olarak göndermiş olduğu için onları HTTPS kullanarak amacını boşa, düz HTTP üzerinden /login.php göndermek ve ardından HTTPS yönlendirmek izin verirsek

+0

"i kullanıcıyı göndermek istemiyoruz ..." "i bir yönlendirme yapmak istiyorum "İkisi birbiriyle uyuşmuyor. Kullanıcının SSL kullanması için zorlamak ister misiniz? Öyleyse, kullanıcıyı giriş formunun HTTPS sürümüne yönlendirmeniz (göndermeniz) gerekir. –

+0

'ancak normal' HTTP' ile bağlandığınızda tabii ki buna sahip olmayacaksınız. Ve port 80 aynı şeyi söyler. '$ _SERVER ['HTTPS'] = 'on';' HTTPS ve portunuz aracılığıyla bağlandığınızda '443' olacaktır. Senaryo doğru olanı yapıyor, mevcut bağlantının HTTP olup olmadığını kontrol et ve eğer değilse - HTTPS versiyonuna yönlendiriyor. – Cheery

+0

Ben olabilir, ancak kullanıcının HTTP bağlantısını değiştirmek için bir olasılık var. HTTPS – Patrioticcow

cevap

6

.

Kullanıcının URL'yi değiştirmesini önlemek için yapabilecekleriniz, giriş sayfasının HTTPS üzerinden değilse giriş bilgilerini reddetmesidir.

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { 
    // request is not using SSL, redirect to https, or fail 
} 

, 443 varsayılan bağlantı noktası üzerinde güvenli bir sunucu çalıştırıyorsanız, o zaman da o olup olmadığını görmek için kontrol edebilirsiniz:

Ne HTTPS kullanımına kontrol etmek için kullanmak şudur bağlantı noktası, ancak PHP kullanıldığında $_SERVER['HTTPS'] değerini boş olmayan olarak ayarlar, böylece en iyi uygulama için varlığını kontrol ederim.

DÜZENLEME:

kullanıcı yüzden elle http https değiştirmek dahil ve düz metin üzerindeki bilgileri göndermek istediğiniz takdirde

, orada onları durdurmak için yapabileceğim bir şey değildir, ama sen giriş izin vermezseniz HTTP üzerinden, doğru bilgiler bile bunları kaydetmeyecek, bunları çalışan tek şey yaparak https kullanmaya zorlayabilirsiniz. Eğer form doldurulduğunda önce giriş formu zaten https://kullanıyor olmalıdır görüntülemek için kullanın ve daha sonra başka bir https:// adrese gönderilmesi gerekir ne olursa olsun sayfa

+0

Evet, programın başında yakın login.php için o çeki ekleyin. Https'in gerekli olduğunu söyleyen bir hata ile girişin reddedilmesinden veya https'e yönlendirmek için 301 başlık kullanılarak birkaç şey yapabilirsiniz. – drew010

5

. Aksi halde, formu saldırıya açık bırakacaksınız.

kullanarak herhangi bir isteği otomatik olarak, giriş sayfanız için en az https:// kullanarak yeniden yönlendirmek için mod_rewrite'a bakabilirsiniz.

+0

Form https’e yayınlandığı sürece, formun kendisinin https olmayan bir sayfada olup olmaması önemli değildir. drew010 @ – drew010

+0

: http://security.stackexchange.com/questions/1692/is-posting-from-http-to-https-a-bad-practice – Crontab

+0

açılış sayfasının html erkek-in modifiye edilebilir Doğru ortası, ancak bir HTTPS sayfasına gönderilirse veriler yine de şifrelenir. En iyi uygulama için genellikle tüm siteyi yalnızca belirli sayfaları değil SSL kullanması için zorluyorum. Bu kılavuzu takiben, giriş formunuzu da https üzerinden yapmalısınız. – drew010

3

Giriş formunu içeren sayfanızın index.php tarafından üretildiğini varsayarak, index.php'da HTTP için HTTPS yeniden yönlendirme için örnek kodunu koymanız gerekir. Bu, kullanıcı formu doldurup gönderdiğinde, HTTPS yoluyla değil HTTP yoluyla /login.php'a gönderilmesini sağlayacaktır.login.php içinde bu çek koymak çünkü zaman login.php tarafından nafile

isteği alır ve karşılık gelen HTTPS URL'ye yönlendirir çalışır, iyi, kimlik bilgileri zaten önlemek istiyorum gereken budur düz metin olarak kendisine sunulan edilmiştir.

Eğer $_SERVER['SERVER_PORT'] bkz gözlem 80 olmak ve login.php içine çek kimlik HTTP üzerinden kendisine sunulan ediliyor ve böylece oturum açma kimlik bilgileri ulaşıyor giriş gerçeğin bir başka kanıtıdır koyduğunuzda $_SERVER["HTTPS"] ayarlanmamış olması sunucunuz istemciden şifrelenmemiş. Bu cevabın ilk paragrafında söylediklerimi takip ederek bu kaçınılmalıdır.

BTW, Bu tür bir yönlendirme yapmak için PHP kullanmazdım. Bu tür yönlendirmeler, Apache HTTPD'de mod_rewrite tarafından rahatlıkla ele alınır. Oturum açma sayfası URL adresinden uygun olması durumunda

bir örneği, http://example.com/foo/:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^foo/$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
5
if($requireSSL && $_SERVER['SERVER_PORT'] != 443) { 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
    exit(); 
} 
İlgili konular