Bir sunucu veritabanında saklanmaz oturum dizeleri güvenlik etkileri?

4 Cevap php

Ben kısa :-) olmaya gidiyorum bu sefer

Bunun yerine her kimlik doğrulaması hakkında daha sonraki arama için, bir kullanıcı için rasgele oluşturulmuş oturum dizeleri veren ve veritabanına koymadan, kullanıcı tanımlayıcılar bu haritalama, neden her istek üzerine veritabanı erişimi önlemek için niyeti ile, aşağıdakileri yapmak ve oturum mağaza dağıtmak değil Bunun yerine:

  1. Kullanıcının tanımlayıcısını almak
  2. Bir seçilmiş bitiminden (tarih ve) zaman alabilir
  3. Birlikte yukarıdaki iki koyun
  4. Bir 'tuz' ile Pad onları - (uzun) keyfi uzunluğu burada gizli bir dize
  5. Gizli bir şifreleme anahtarı ile çıkan dize şifrelemek

Sonuç oturum anahtarı olarak (HTTP Cookie mekanizmasını kullanarak) kullanıcıya gönderilen bir dize olurdu. Açıkçası, kimlik üzerinde, prosedür bir kullanıcı kimliği ayıklamak için, yine sunucu tarafından iptal edilir. Vade datetime denetler, olmasıdır. Tuzları ve şifre çözme tuşları büyük miktarda büyük miktarda denenmiş olması nerede bir kaba kuvvet saldırısı gerekli, çünkü oturum dize, kendini uydurmak için müşteri için olurlu düşünülebilir, artı şifrelenmemiş verilerin doğru bir yapısı vardır tahmin edilecek.

Benim sorum: Ben özetlenen yöntemin güvenlik ile ilgili etkileri nelerdir? Benim düşünceme göre, belirgin avantajları vardır:

  1. Oturumları merkezi deposunda değil, ancak bunun yerine dağıtılır.
  2. Son Kullanma değeri hala bu dağıtılan oturumların süresiz dolaşıma yok olmasını sağlar.
  3. Şifre çözme hızlı ve veritabanı erişim daha az karmaşık olması durumunda, yöntem, aynı zamanda tabii ki daha hızlıdır.

4 Cevap

Eğer şifrelemek için kullanmak ne istiyorsun / verilerin şifresini?

Genellikle, ben yukarıda çünkü anlattı ne yapıyor öneririz olmaz:

  • Neden merkezi bir mağazada tüm oturumlara sahip değil? Şifreleme algoritması çalıntı olabilir / de kırık.
  • Veritabanı erişimi büyük olasılıkla daha hızlı ve daha kolay / kod yönetmek olacaktır

Görüntü kalanını kendiniz yapabilirsiniz - kaynak kodu çalınması veya algoritma kırılırsa, saldırganlar yeni, özel bir oturum oluşturmak ve yönetici kendileri yapabilir

Eğer PHP standart oturumu kütüphane kullanımı hakkında olsa var?

Sistemin zayıflık olduğunu belirteci 'de açmış' bir tanımlama şifresiz gönderilir ve bu belirteç bir veritabanında olup olmadığını aynı zayıflık, ve HTTPS bağlantılarını kullanarak karşı korunuyor edilir.

Çoğu site HTTPS kullanmak istemiyorum, o söyledikten sonra. Onlar bir ticaret-off yapmak. HTTPS kullanmayın ve size bir çerez göndermek vs doğrulanmış çerez göndererek bir veritabanı anahtar karşılaştırmak istiyorsanız, o zaman ikincisine kıyasla eski hiçbir şey hafta yok.

Ayrıca istek IP adresini de son kullanma tarihini eklemek için iyi bir fikirdir.

Eşit derecede güvenli ve oldukça fazladır straightforward to send plain-text credentials and then a cryptographically secure hash of the credentials and the secret. See HMAC detayları için - Bununla birlikte, tanımlama encrypted belirteci saklamak için gereksizdir . HMAC temelde:

Değişkenler kullanıcı adı düşünün, ip_address ve bir salt (rasgele sayı) HttpOnly çerez saklanan dolacağı; Bunları ayıklamak yanı sıra çerez de oldu senin karma. Lütfen komut doğrudan tanımlama içinde saklanan asla ek bir 'şifre' var:

hash = hash_hmac("sha256",username+expires+ip_address+salt,"password")

Bu karma güvenlik quality of the password dayanır. Bu rakam ve harf ve noktalama bazı rasgele dize olabilir ve sunucu tarafı komut saklanır uzunluğunda en az 20 karakter olmalıdır.

Çerez karma doğru ise, karma olan alanlar ile tahrif edilmemiş olması certain olabilir! Kesinlikle tüm evrende bilgisayar ve bir bazillion yıllık işlem gücünün ötesinde - anlamlı bir çarpışma üreten bir saldırganın şansı [1] biri gazillions olacaktır. Şifrenizi makul rasgele bir şey ise onun, sabitleyen.

Ama tüm sistem kararlı bir saldırgan için sadece bir hız yumru olduğunu ve ödeme veya güvenlik kullanıcı beklenti dahil olmak üzere normal web sitelerine ziyade şeyler için sadece uygun. HTTPS olmadan sistem güvenli değildir, ve HTTPS ile kurabiye kimlik gereksizdir.

A belirlenen saldırganın sitenizin şifrenizi kurtarmak için erişebilir - aynı koşullarda bir veritabanına giriş bilgilerinizi kurtarma onları durdurma şey, bu yüzden bu konuda söz özetlenen veritabanı yaklaşımından farklı yoktur.

A belirlenen saldırganın kimlik bilgilerini kopyalamak ve örneğin, kullanıcı adına kötü istekleri gönderebilir csrf ve.

Ve böylece.

[1] oran hafife.

Ben bu yöntemi seviyorum ve o ile büyütmek için kolay çünkü benim web siteleri için kullanabilirsiniz.

Ben HTTP bu protokol ile görmek sadece güvenlik sorunu istekleri saldırıları / sniffing'i oynatmak için hassas olmasıdır. Bu arada, aynı sorun her istek üzerine oturum kimliğini yeniden durumlar dışında, olmayan bir şifreli taşıma protokolü çerez saklanan oturum kimlikleri ile var.

Ekstra okuma: Bir PHP implementation wich (üzgünüm şu anda üzerinde stackoverflow birden fazla bağlantı açamazsınız ;) bu konuda büyük bir kağıda bir bağlantı içerir.