Nasıl HTTP yerine HTTPS üzerinde benim sayfaya erişmek için kullanıcıların zorlayabilir?

7 Cevap php

Ben bir HTTPS sayfasında (Apache üzerinde PHP) olarak erişilebilir zorlamak istiyorum bu sadece bir sayfası var. Nasıl bu HTTPS gerektiren tüm dizin yapmadan yapmalıyım? Eğer bir HTTP sayfasından bir HTTPS sayfaya bir form gönderebilirsiniz Ya da, bu HTTP yerine HTTPS ile göndermek nedir?

İşte benim örnek:

http://www.mysite.com/buyCrap.php

Ben sadece erişilecek istiyorum:

https://www.mysite.com/buyCrap.php

Tabii, ben HTTPS sürümü işaret Bu sayfa tüm bağlantıları koyabilirsiniz, ama bu amaç üzerinde HTTP üzerinden erişerek bazı aptal durmuyor ...

Ben düşündüm bir şey, onlar HTTPS sürümünü erişen emin olmak için kontrol etmek PHP dosyasının başlığında bir yönlendirme koyarak:

if($_SERVER["SCRIPT_URI"] == "http://www.mysite.com/buyCrap.php"){
    header('Location: https://www.mysite.com/buyCrap.php');
}

Ama bu, doğru bir yol olabilir olamaz?

BTW, URL hiç dikkat ediniz. Ben aslında bir alışveriş sepeti vardı bir sayfa, vb olsaydı, bunu farklı bir şekilde yapacağını biliyorum. Eğer kart bir kez şarj amaç için harici bir sitede bir ödeme ağ geçidi sunulacak kredi kartı bilgileri yazmanız için bir fiyat bir öğe satan bir siteden bir sayfa olarak düşünün.

7 Cevap

Bunu daha önce yaptık yolu temelde ne yazdı gibi, ancak herhangi bir kodlanmış değerlere sahip değildir:

if($_SERVER["HTTPS"] != "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

Apache üzerinde bir direktif ve mod_rewrite ile yapabilirsiniz:

<Location /buyCrap.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

İsterseniz regular expressions kullanılarak zamanla akıllı Konum yapabilir.

Sen HTTP Strict Transport Security (GKS) başlıkları ile her zaman HTTPS istemek için client zorlamak gerekir:

// Use HTTP Strict Transport Security to force client to use secure connections only
$use_sts = true;

// iis sets HTTPS to 'off' for non-SSL requests
if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
    header('Strict-Transport-Security: max-age=31536000');
} elseif ($use_sts) {
    header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
    // we are in cleartext at the moment, prevent further execution and output
    die();
}

GKS en modern tarayıcılarda desteklenir, ancak evrensel olmadığını unutmayın. Böylece yukarıdaki mantık el onlar HTTP sonuna kadar eğer ne olursa olsun destek kullanıcı yönlendirir ve daha sonra istemci istekleri tarayıcı mümkünse tarafından yönlendirilmesi gerektiğini böylece GKS başlığını ayarlar.

$_SERVER['HTTPS'] o SSL olup olmadığını söylemek ve doğru yerde değilse yönlendirmek için kullanın.

Ve unutmayın, form görüntüler sayfasında en çok ihtiyacı sonrası geri URL var, HTTPS üzerinden beslenen gerek yoktur.

Edit: evet, aşağıda işaret edildiği gibi, bu HTTPS tüm süreci olması en iyisidir. Bu çok daha güven verici - Ben sonrası en kritik parçası olduğuna işaret edildi. Ayrıca, herhangi bir tanımlama bilgileri güvenli olarak ayarlanır dikkat çekmek gerekir, bu yüzden sadece SSL ile gönderilecektir. Mod_rewrite çözüm benim kendi web uygulamaları bir çok sabitlemek için kullanılan ettik de çok şık olduğunu.

Aynı sayfada HTTP ve HTTPS karışmaz. HTTP üzerinden de servis edilir bir form sayfası varsa, ben veri gönderme hakkında sinir olmak için gidiyorum - teslim Görünüm Kaynağı yapıyor ve bunun için avcılık olmadan HTTPS veya HTTP üzerinden giderse ben göremiyorum.

Submit link ile birlikte HTTPS üzerinden formunu hizmet avantajı için bir değişiklik bu ağır değil.

http://www.besthostratings.com/articles/force-ssl-htaccess.html

Bazen kullanıcı securte bağlantısı üzerinden sitenizi geziyor emin olmak gerekebilir. . Her zaman bağlantı (https://) sabitlemek için kullanıcıyı yönlendirmek için yol kolay bir aşağıdaki satırları içeren bir htaccess dosyası ile yapılabilir:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

,. Htaccess web sitesi ana klasörde yer olmalıdır unutmayın.

Eğer kullanabileceğiniz belirli bir klasör için HTTPS zorlamak istiyoruz:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]

. Htaccess dosyası HTTPS zorlamak gerekir klasöre konulmalıdır.

Sen güvenlik nedenleriyle olmamalıdır. Çerezleri burada devreye özellikle eğer. Bu çerez tabanlı tekrar saldırılara açık geniş bırakır.

Her iki yolda da nağme Apache kontrol kurallarını kullanmalısınız.

Sonra etkin olan HTTPS için sınamak ve gerektiğinde gerektiği gibi-yönlendirebilirsiniz.

You should redirect to the pay page only using a FORM POST (no get), and accesses to the page without a POST should be directed back to the other pages. (This will catch the people just hot-jumping.)

http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/

Daha fazla sağlamak için değil, özür dilemek başlamak için iyi bir yerdir. Ama gerçekten should SSL üzerinden her şeyi sok.

Bu aşırı koruyucu, ama en azından daha az endişeler var.