Https formu her zaman değil çalışma ilanı

3 Cevap php

Sitemde ben basit bir giriş formu var. Sayfa HTTP üzerinden hizmet, ancak formun POST URL HTTPS olduğunu.

Normal bir yöntem kullanıcı adı / şifre, formu (aynı sitede, tam HTTPS URL) teslim edilir doldurur ve sonra POST işlem kullanıcıların ana sayfasına yönlendirme bir 303 yapmasıdır. Ama bazen bu olmaz.

Döngüsü (ve bu% 100 tekrarlanabilir) şudur:

  1. , Giriş formunu alır ayrıntıları doldurun ve gönderin
  2. Oturum açma komut çağrılan sunucu üzerinde, verileri doğrular ve tüm iyi ise o zaman, bir 303 kullanıcıların ana sayfasına yönlendirildi yapar.
  3. Sonra ben giriş formuna geri sarıyorum hangi noktada, logoutu tıklatın ve sonra girişe tıklayın
  4. Sonra yine benim detayları doldurun, gönderin çarptı.
  5. Bu süre, ancak, giriş mantık (2. adımda oturum açmış ayıklama kod adlı değil) idam değil, ama hala kullanıcıların ana sayfasına yönlendiriliyorsunuz ediyorum. Ben başarılı bir giriş oldum değil çünkü Ama, ben ön sayfaya çıkartılmamış ...

Peki neden POST daima giriş formu çağıran değil mi? Ben (spec göre, ve olmamalıdır) 303 önbelleğe ediliyor sanmıyorum ...

Sunucusunda HTTPS günlükleri baktığımızda, login.phpo ilk defa olarak adlandırılan, ancak ikinci değil ediliyor ....

Edit:

Tamam, biz sorunu çözdük. Ilgilenen olanlar için:

Site bir yük dengeleyici arkasında 2 sunucular üzerinde çalıştırılır. kullanıcı oturumları 'yapışkan' - yani bir kullanıcı LB bu sunucuya 'bağlı' onları tutacak bir web sunucusu üzerinde geziyor kez söylemektir. Bu bir çerez aracılığıyla yapılır. Biz LB https geçmek kez bağlantı tarayıcı ve web sunucusu arasında şifreli Ama, çerez okuyamaz. Bu yüzden sunucular arasında alternatif oldu. WWe webserverlarda arasında giriş kimlik doğrulama yaymak için kod var, ama bu yeterince hızlı olmuyordu. Peki neler oldu:

  1. Sunucu A kullanıcı tarayıcılar, 'A beni tutmak' diyerek bir çerez, kendi oturum açma kimlik bilgileri doldurur alır ve vurur gönderin
  2. LB, HTTPS trafiğini (ve dolayısıyla çerez) deşifre yapamaz olmak, B onları% 50 zaman gönderir
  3. B giriş doğrular ve kullanıcı olmayan https ana sayfasına kullanıcıyı yönlendirmeden önce, oturumda onaylanacak ayarlar
  4. Anasayfa olmayan https olduğundan, LB çerez okur ve B'den yeterince hızlı yayılan değildi çünkü kimlik hiçbir şey bilmiyor A, bunları gönderir ..

Çözüm böylece kullanıcıların gerçekten ne olursa olsun, HTTP / HTTPS geçişler, bir web sunucusu üzerinde kalmak sağlamaktan, LB HTTPS trafiği çözmek için izin vermek oldu.

3 Cevap

Eğer herhangi bir artık oturum değişkenleri onu atma olup olmadığını görmek için önbelleğini temizleyerek denediniz Nasıl "oturumu" mı?

Firefox: Araçlar -> Özel Verileri Temizle -> Cache, Çerezler ve Doğrulanmış Sessions edin

Ben (spec göre, ve olmamalıdır) 303 önbelleğe ediliyor sanmıyorum ...

Hayır, bir 303 tarayıcı tarafından önbelleğe olmayacak, ancak bazı diğer seviye, önbelleğe alma veya sırayla diğer sayfaları olabilir. Ayrıca, giriş durumunu saklamak için tanımlama bilgileri kullanarak varsayarak, aynı çerez, set ve silinen ediliyor böylece 'yol' ve 'etki alanı' kurma konum sağlamak için gereken yerine sitenin farklı yerlerinde için birden gölgeli kopya .

Daha fazla kod teşhis etmek için gerekli.

Sayfa HTTP üzerinden hizmet, ancak formun POST URL HTTPS olduğunu.

Bunu yapmayın. Kullanıcı 'eylem' URL elle kaynağında bakarak (ve başvurulan her komut kontrol) ne olacak değil, olmadan HTTPS olacak söylüyorum hiçbir yolu vardır.

Man-in-the-middle saldırgan basitçe giriş formu ile ilk HTTP sayfasını değiştirerek kimlik bilgilerini kapmak için bu yüzden bu mümkün. Bu POST alıcı üzerinde herhangi bir koruma tamamen tartışmalı hale getirir.

Ondan herhangi bir fayda elde etmek için bir giriş formu içeren herhangi bir sayfaya dahil giriş sürecinin her aşaması, HTTPS üzerinde olmalı.

Bir önbelleğe alma sorunu olmalı gibi görünüyor, ben düşünürdüm. Ben açıkça bir şey önbelleğe değiliz ki sayfalarında başlıkları ayarlayabilirsiniz, ve nasıl çalıştığını görmek istiyorum.

İkinci tahminim, bir session / cookie sorunu (kuşkusuz, ben bu işe nasıl düşünce değil) olması. Lütfen çıkış sayfasında, açıkça (istemci ve herhangi bir daimi olmayan çerezler) oturumu yok musun?

Son olarak, herhangi bir sunucu tarafında önbelleğe alma kullanıyorsunuz? (Eğer bir çerçeve kullanıyorsanız, her bir çerçeve biraz farklı önbelleğe ve) ben bir PHP opcode önbellek bu davranışı sergilemek olacağını sanmıyorum, ama ben memcache ile yabancı şeyler gördüm.