Bir ödeme sayfasında kullanıcıya gönderirken, onlar https://mysite.com için http://mysite.com değiştirilir. Bunun bir sonucu olarak, $ _SESSION değişkenleri kaybolur.
Site veya bazı kullanım olmayabilir geçerli bir SSL sertifikası vardır.
Bir ödeme sayfasında kullanıcıya gönderirken, onlar https://mysite.com için http://mysite.com değiştirilir. Bunun bir sonucu olarak, $ _SESSION değişkenleri kaybolur.
Site veya bazı kullanım olmayabilir geçerli bir SSL sertifikası vardır.
Varsayılan olarak ben tamamen farklı seans olarak http ve https bağlantılarını tedavi etmek için bir tarayıcı beklenebilir. Kongre http://someUrl/ ve https://someUrl/ bu garanti değil aynı sayfaya işaret edecek olmasıdır rağmen. Tamamen farklı sitelere bağlantı noktası 80 üzerinde çalışan (http) ve port 443 (https) olabilir.
Ben PHP bilmiyorum ama genelde ben oturum değişkenleri, güvenli ve güvenli olmayan oturumlar arasında serbestçe kullanılabilir olmasını beklemek olmaz, örneğin Ben ziyaret tüm sonraki güvensiz sayfalara kullanılabilir olması için son ödeme dan kredi kartı numarasını beklemek olmaz.
Yetkili olmayan cevap affet ama birçok cevap yok, çünkü benim 2c'yi chuck düşündüm.
Lütfen oturum tanımlama güvenli bayrağı ile oluşturulur gibi görünüyor, ancak oturum tanımlama üzerinde değil geçirilen nedeniyle hangi için ödeme sayfanın url ile bir şey var.
Ya da muhtemelen, sizin oturum tanımlama güvenli değildir - çıkış sayfanın url tarayıcı çerezi gönderen olmadığını (http://mysite.com vs http://www.mysite.com) kadar farklı olduğunu sadece.
Eğer https ve tersi için http üzerinde saygısız daha fazla okumak isterseniz - at my writeup on selective ssl :-) bakmak yok
Farklı etki alanları arasında oturumu değerleri geçemez. Sen kendi değerlerini geçmek için http post-almak veya bir veritabanı kullanmanız gerekir. Güvenlik için, bir dize tüm değerleri CONCAT ve kullanabilir
sha1($string)
ve değerlerin yanında post it ve diğer sayfa alır değerleri için sha1 hesaplamak, daha sonra karma karşılaştırın.
Farklı etki Post yöntemi bir güvenlik mesajı göstermek için tarayıcılar neden, böylece kullanmayın.
Get yöntemi için url kullanarak güvenli değil, sizin sisteminizde olsun parametreleri izin için yönlendirildi sayfada bir parola sormak gerekir.
Eğer güvenlik ihtiyacınız varsa çerezleri kullanmayın.
The way I am suggesting is, save the values in a database and generate a key, then make your redirection link using your key, forward the users page with a get parameter which has the key, then the page user is redirected to gets that key, fetches the data and removes the key. you can generate a key with sha1
PAGE 1---
$key=sha1($allvalsconcat);
//insert your session values to a database also the key in a column
header("Location: page2.php?key=".$key);
PAGE 2---
// select from database where key=$_GET["key"];
// delete from table where key=$key
Bu oldukça güvenli.
the things that can happen: a script entering random values for the parameter "key" to make your website load the data into your memory?
This is not going to happen because you delete the entry after using it. Some common misconception is that get values are unsafe and should always be avoided.
performans mükemmellik isterseniz mysql "bellek" için tablo motor tipini ayarlayabilirsiniz.
Ben en çok bir 3. parti API aracılığıyla hassas bilgi aktarımı sanki ona aynı görünümlü, şifreli bilgi aktarımı hakkında burada belirttiğimiz ne ek olarak, tavsiye ederim. Nasıl birisi isteği sızdırma değil biliyor musunuz? Gerçekten kurulum ne kadar hassas bağlı olarak, isteği doğruluğunu teyit için birçok protokolleri vardır. Eğer dikkatli değilseniz eğer ele geçirilmesini hesaplarına kendinizi açıyoruz.
Aynı sunucuda olsa bile, bu göz önünde bulundurun:
Birisi şifrelenmiş anahtar üzerinden geçer vb bağlantıyı, form eylemi, aşağıdaki zaman onlar sitenizin güvenli sürümüne olsun ÖNCE, ne de koklama birinin önleyecektir? Ben bir kamu WIFI noktada olsaydı, bu çok zoraki olmaz. Ben, sitenizin gibi davranmak kendi dizüstü istekleri yeniden yönlendirmek, belirteci kapmak ve geldikleri yere geri ziyaretçi yönlendirme olabilir. Onlar bir aksaklık olduğunu varsayıyorum, ve hiçbir fikrim yok olurdu. Şimdi ben onlar kadar giriş ve muhtemelen dosya üzerinde kredi kartı ile malzeme 10.000 $ değerinde satın gitmek ve başka bir yere yollayabilirsiniz. Burada almak dikkatli derecesi duyarlılık derecesini eşleşmesi gerekir.
Ayrıca, sizin belirteçleri (bir kullanımı sadece, saniye X sayısından sonra, vb) sona emin olun, ama ben de, yani iki ucunda post-Redirect-al desen kullanarak düşünün:
Bir sayfa veya teminatsız sitenin şeklinde doğrudan bağlantı gösterir, ama o uç yönlendirmek (ve tüm belirteci / şifreleme şeyler işlemek) bir bağlantı görünmüyor. Eğer güvenli sürümü geldiğinde, aynı ("? Belirteç = asdfjalksfjla" sadece URL orada oturan bir parametre bırakmayın; yönlendirin) yok.
Yani, resmi belirteç tabanlı sistemler bu çok sorunu çözmek için tasarlanmış, ama sadece bunun için OAuth uygulanması overkill olabilir. Çalıştırmadan önce olası güvenlik açıklarını planlama biraz zaman harcayın. Bana geldi really hard belirteç imkansız (veya, vb çarpışmalar orada olamazdı) anlamına gelmez sanırım, bu yüzden buna göre planlamak olurdu diye.
Ayrıca PHP'nin yerleşik işleyicileri daha sofistike bir oturum yönetim sistemi gerekebilir. Eğer (anahtarlama protokolleri bu şekilde muamele edilir) birden ziyaretler arasında bir oturuma devam etmek için PHP zorlayabilir bilmiyorum.
HTTPS güvenli olması gerekiyordu ve onun bir parçası yapıyor, çünkü bu normal bir davranıştır Merak etmeyin.
Aşağıda HTTPS HTTP geçiş yaparken oturum korumak hangi aracılığıyla bazı hileler vardır.
GET kullanarak sayfa arasında oturum kimliği İletim
POST POST oturum kimliği
Oturumları kaydetmek için dosyaları kullanın
Oturumları için Çerezler kullanın
Oturumu kaydetmek için veritabanı kullanımı
Benim cevap yoluyla bir şey elde umuyoruz.
Eğer aynı sunucuda HTTP ve HTTPS hizmetleri arasında geçiş yaptığınızda, HTTP oturum kimliği HTTPS oturumu için geçirilen değildir. Üç olası yollarından biri HTTPS sayfaya HTTP sayfasından oturum kimliği geçirerek ayarlayabilirsiniz:
"session_start() bir oturum oluşturur ya da GET, POST veya bir çerez gibi bir isteği, üzerinden aktarılan geçerli oturum kimliği dayalı geçerli bir sürdürür" PHP: session_start den
Eğer oturumları kullanırken, normalde "session_start ()" ile komut başlayacak. Tarayıcı bir oturum kimliği tanımlama kümesi, varsa session_start(), oturum kimliği kullanır. Tarayıcı bir oturum kimliği tanımlama kümesi yoksa, session_start() yeni bir yaratacaktır.
Oturum kimliği (sizin örnekte, tarayıcı HTTPS oturumu için yeni bir oturum kimliği tanımlama oluşturarak) ayarlı değilse, size session_id() fonksiyonunu kullanarak ayarlayabilirsiniz. session_id() da uygun bir dizge olarak oturum kimliğini döndürür. Bu yüzden
...
$currentSessionID = session_id();
...
Geçerli oturum kimliği $ currentSessionID değişken eşittir ayarlar ve
...
session_id($aSessionID);
...
$ aSessionID için tarayıcıda SessionID çerez ayarlar. dan PHP: session_id
Burada iki komut ile bir örnek. Bir HTTPS üzerinden HTTP ve diğer erişilen üzerinden erişilir. Onlar oturum verileri korumak için aynı sunucuda olması gerekir.
Script 1(HTTP):
<?php
// This script will create a session and display a link to your secure server address
// to transfer your session ID. In this example, the secure page to receive the session
// ID is located at http://www.yoursite.com/safePages/securePage.php
// Start a session using the current session ID stored in a cookie, or create
// a new session if none is set.
session_start();
$currentSessionID = session_id();
// Set a variable that will be retrieved with the HTTPS script.
$_SESSION['testvariable'] = 'It worked';
// $secureServerDomain is the domain of your secure server
$secureServerDomain = 'www.yoursite.com';
// $securePagePath is the path to the page that will receive and set the session ID.
$securePagePath = '/safePages/securePage.php'
echo '<a href="https://' . $secureServerDomain . $securePagePath . '?session="' . $currentSessionID . '">Click here to transfer your session to the secure server</a>';
?>
Script 2(HTTPS):
<?php
// Retrieve the session ID as passed via the GET method.
$currentSessionID = $_GET['session'];
// Set a cookie for the session ID.
session_id($currentSessionID);
// Start a session.
session_start();
// Test retrieval of variable set when using HTTP.
if (!empty($_SESSION['testvariable'])) {
echo $_SESSION['testvariable'];
} else {
echo 'It did not work.';
}
?>
Bu HTTP ve HTTPS çalışmak için sunucuları (aynı php.ini ile aynı fiziksel makine üzerinde çalışan, yani varsayılan dosyaları işleyici için,) aynı oturum veri depolama alt tabakayı kullanmanız gerekir. Orada bazı güvenlik açıkları burada, bu yüzden hassas bilgileri aktarmak için bu kodu kullanabilirsiniz olmaz. Bu sadece bir örnek olarak çalışılabilir içindir.
Ben daha önce bu sorun koştu, ben hızlı bir düzeltme olarak yukarıdaki ile geldi, ama ben sadece sorunun asıl nedenini hatırladı. I https://mysite.com/page.php ("www" nin eksikliği fark) için http://www.mysite.com/page.php gidiyordu. Emin http://www.mysite.com/page.php https://www.mysite.com/page.php ve http://mysite.com https://mysite.com/page.php bağlanacağı bağlantı olacaktır emin olun.
PS, I didn't actually run these scripts so there may be a typo or two that prevents them from running properly as is.
Oturum çerezi güvenli ayarlanır gibi geliyor. Çerezler true olarak ayarlanırsa, çerez olmayan https sitelere gönderilmesi anlamına gelir, bir "secure" bayrağı var. PHP muhtemelen oturum çerezleri için o kullanıyor. Sen session_set_cookie_params fonksiyon veya session.cookie_secure php.ini ayar ile ile değiştirebilirsiniz.
Biz de bu sorunu vardı. Bu bizim PHP kurulumu hakkında suhosin yama kullanılarak çünkü olduğu ortaya çıktı. Biz suhosin.session.cryptdocroot = Off
/etc/php.d/suhosin.ini
olarak ayarlayarak bunu düzeltmek.
suhosin.session.cryptdocroot
görmek hakkında Suhosin kılavuzu için http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.cryptdocroot.
Biz aslında bu blog yazısı düzeltme bulundu: http://www.yireo.com/blog/general-news/315-switch-between-http-and-https-looses-php-session.
Aşağıdaki çözüm, güvenli ve güvenli olmayan sunucular aynı arka uç hizmetleri (önbellek, veritabanı deposu, vb) erişim varsayar.
Onlar alışveriş yapıldığı zaman bizim çıkış akışı için bir kullanıcı gönderirken biz bu aynı sorunu ile uğraşmak zorunda kaldı. Bunu çözmek için, biz bir yerde bir önbelleğe alma katmanı koymak ve tüm ilgili verileri önbelleğe. Örneğin, biz, oturum değerlerinden ürün kimlikleri ve kullanıcı kimliği toplamak, onları serialize, bir karma oluşturmak ve nihayet anahtar olarak hash kullanarak önbellek içinde oturum verilerini saklamak istiyorsunuz. Daha sonra url karma ile güvenli bir siteye kullanıcıyı yönlendirme olur.
Kullanıcı güvenli bir sitede sona erdi zaman biz hash dayalı önbellek dışında veri çekme girişiminde. Sonra kullanıcı kimliği ve ürün kimlikleri ile biz veritabanı ve son ödeme inceleme için kullanıcıya, mevcut dışında tüm fiyatlandırma ve açıklama verileri yüklemek olabilir.
Orada önbellek veri uçucu olduğunu bir miras risk, ama yönlendirme hızlı olur gibi biz onunla herhangi bir sorunları yoktu.
Tüm sayfalar için HTTPS kullanan düşünün, bu sorunu önlemek için en kolay yoldur ve sitenizin güvenliğini artıracaktır.
If SSL for all pages is not an option to you, then you could use this approach: Switching between HTTP and HTTPS pages with secure session-cookie. The idea behind is, that you leave the session cookie unsecure (and therefore available to HTTP and HTTPS pages), but have a second secure cookie to handle the authentication. It's a good way to separate the two concerns "maintaining the session" and "authentication".
HTTP HTTPS veya HTTPS HTTP arasında oturumu yönetebilirsiniz:
GET kullanarak sayfa arasında oturum kimliği İletim
POST POST oturum kimliği
Oturumları kaydetmek için dosyaları kullanın
Oturumları için Çerezler kullanın
Oturumu kaydetmek için veritabanı kullanımı
Örneğin aşağıdaki GET kullanarak iletmek için kullanılabilir ....
File : http.php ……………
<?php
session_start();
$sessionID = session_id();
$_SESSION['demo'] = ‘Demo session between HTTP HTTPS’;
echo ‘<a href=”https://www.svnlabs.com/https.php?session=’.$sessionID.’”>Demo session from HTTP to HTTPS</a>’;
?>
File: https.php ……………
<?php
$sessionID = $_GET['session'];
session_id($sessionID);
session_start();
if (!empty($_SESSION['demo'])) {
echo $_SESSION['svnlabs'];
} else {
echo ‘Demo session failed’;
}
?>
IE7: Bu sayfa, güvenli ve güvenli olmayan öğeleri hem de içerir
Eğer IE mesajı güvenli ve güvenli olmayan öğeleri önlemek için vb css, js, resim, flash gibi sayfadaki tüm statik kaynak için göreli yolunu kullanmak zorunda ...
IE Message