Otomatik giriş nasıl güvenli bir şekilde uygulanır


15

"Büyük olasılıkla şifreleri yanlış sakladığınız" konusunda çok, çok, çok sayıda yazı okudum . Her zaman bir kullanıcının oturum açtığı bir sunucuda şifrelerin saklanmasını ifade ederler; temelde şifreleri tuz gibi emin olun gibi her yerde tavsiyelerde (ceza amaçlı) rehash, vb. Ancak, müşteri giriş yapmak zorunda kalmamak için bir istemcide şifreleri saklamak için en iyi uygulamalar hakkında bir makale görmedim her giriş yapmak istediklerinde manuel olarak; "beni hatırla" özelliği.

Tarayıcılardan Dropbox gibi programlara kadar birçok yazılım parçası bu özelliğe sahiptir.

Kısa bir süre önce Dropbox'ın bilgisayarınızda başka bir bilgisayara kopyalayıp yapıştırabileceğiniz ve Dropbox'ı başlatabileceğiniz ve kimliğinizi aldığınız cihaz olarak giriş yapabileceğiniz bir kimliği nasıl sakladığı hakkında eski bir makale okudum ; giriş yok, hiçbir şey yok ve Dropbox hesabına tam erişim. Bu gerçekten aptalca bir tasarıma benziyor, ancak bunu yapmanın daha iyi bir yolunu düşünemiyorum.

Çerez gibi bir şeyi düz metinde saklamaktan nasıl kaçınacağımdan bile emin değilim. Şifrelerseniz, şifresini çözmek için anahtarı nerede saklarsınız?

Güvenlik açıklarını tanıtmamaya bakmanın tek yolu, otomatik oturum açma özelliğini kaldırmak ve her hizmet kullanmak istediklerinde kullanıcının parolasını yazmasını sağlamaktır, ancak bu bir kullanılabilirlik mücadelesidir ve kullanıcılar bunu yapmamak için şımarıktır.

Otomatik giriş özelliğini uygulamak için kimlik bilgilerini yerel olarak güvenli bir şekilde saklama hakkında ne okuyabilirim? İlkeler bir makalenin tamamı için çok basitse, bunlar nedir? Söz konusu yazılım tüm platformlarda bulunmayan özelliklere (bazı linux dağıtımlarının sahip olduğu "anahtarlık" gibi) bağlı olmamalıdır.


2
Bu, güvendiğiniz şeyle ilgilidir. Makinenin kimliğini saklamıyorsanız, sorun budur. Eğer anahtarlığa güveniyorsanız, o zaman alacağınız maksimum güvenlik budur. Elbette, cihaz donanımını veya başka bir şeyi tespit etmek gibi özel güvenlik ekleyebilirsiniz, ancak hepsi sahte olabilir, böylece sonunda bilemezsiniz. Sizin kontrolünüz dışında. Tabii ki açık metin şifreleri kaydetmek gibi aptalca şeyler hariç.
Luc Franken

@LucFranken makineye nasıl güvenebilirsiniz? Birisi dropbox gibi sizi sömürebilir. Ayrıca anahtarlığa güvenirdim ama tüm bilgisayarların bir tane yok ve Windows asla sahip değil (AFAIK). Parolaları saklıyorsanız, bunları düz metin olarak saklamaktan nasıl kaçınırsınız? Onları şifrelerseniz, şifresini çözmek için anahtarı nerede saklarsınız?
Jay Simon

Sorun tam olarak bu, güvenemezsin. Kullanıcı sadece ona güvenmeyi tanımlayabilir. Bu, kullanıcının makinesinin ne kadar güvenli olduğunu anladığını dikkate alır. Dropbox'lardan veri alan bir virüs yazmak mümkündür. Yerel olarak depolanan anahtarlar ve diğer yerel verilerle aynı. Daha güvenli hale getirmeye yardımcı olabilirsiniz (5 sayı kodu gerektiren uygulamaları düşünün) ama sonunda yerel ve kontrolünüz dışında.
Luc Franken

@LucFranken sadece ben mi yoksa otomatik giriş her yerde var mı? Öyleyse, neden insanlar bunu nasıl doğru yapacakları hakkında yazmamışlar?
Jay Simon

Bazı kurumsal yazılımlar buna izin vermese de çok yaygın bir gerekliliktir. Örneğin SalesForce, parolayı değil yalnızca kullanıcı adını kaydetmeye izin verir. Açık bir şekilde btw yazalım. giriş için şifreyi istemcide saklamanız gerekmez. Sunucudaki bir karmaya karşılık gelen rastgele bir karmayı depolayabilirsiniz.
Luc Franken

Yanıtlar:


12

Bunun bir yolu:

  • Kullanıcı oturum açtığında, oturum kimliğini istemcinin bilgisayarındaki bir çerezde saklar (kullanıcı adı veya şifre değil).
  • Oturumu IP adresine bağlayın, böylece tek bir oturum kimliği yalnızca başlatıldığı bilgisayarla çalışır.

Sitenizi geliştirmek için hangi çerçeveyi kullandığınıza bağlı olarak, bu davranış yerleşik bir özellik olarak kullanılabilir.

HTTP protokolü zaten vatansız olduğu için, web sitesini kullanmanın tek bir oturumu sırasında oturum açmış bir kişi ile siteyi bir sonraki kullandıklarında "otomatik oturum aç" arasında işlevsel bir fark olmadığını unutmayın; bu sadece oturumun süresi dolmadan önce ne kadar zaman ayırdığınızla ilgilidir.

Güncelleme: Ayrıca, artırılmış güvenlik için HTTPS kullanın.

Güncelleme 2: Bu yaklaşımın IP adreslerini çok değiştiren kullanıcılar için iyi çalışmadığı için sınırlamaları olduğunu unutmayın. Ancak, daha yüksek bir güvenlik düzeyi sağlar ve bazı durumlarda yararlı olabilir.


1
Bir IP adresine bağlanmak çok işe yaramaz çünkü birisinin sizinle aynı güvenlik duvarının arkasında bir bilgisayarı olabilir.
Jay Simon

2
@JaySimon, "fazla yardımcı olmaz" demezdim. Sizinle aynı güvenlik duvarının arkasındaki bilgisayar sayısı dünyadaki bilgisayar sayısından çok daha azdır. Bu, potansiyel saldırı saldırılarınızı sınırlamakla ilgilidir ve bu onu büyük ölçüde sınırlar. Bu standart bir yaklaşım ve bunun ötesinde yapabileceğiniz çok şey olduğunu düşünmüyorum. Birisi kullanıcı olarak aynı IP adresi varsa ve bir oturum kimliği elde etmek yönetir, bu kişi sunucunun perspektifinden kullanıcıdan farksız olacaktır. Eğer kaldıysa herhangi tür log-in sitenizde, bu tür bir saldırıya maruz kalmaktadır.

3
Böyle bir yaklaşımın, IP adresi sık sık değişebilen cep telefonlarındaki kullanıcılar için can sıkıcı olacağını düşünüyor musunuz?
Jay Simon

@JaySimon, bir oturumda gerçekleşirse, kullanıcı ani bir çıkış olarak deneyimleyecekti, bu kesinlikle sinir bozucu olurdu. Aslında ne sıklıkta değiştiklerini bilmiyorum (hızlı bir Google araması kesin bir cevap vermez). IP gerçekten kullandıkları sırada değişmesi muhtemel olmadığı sürece bu konuda çok endişelenmezdim.

Oturumun IP ile sınırlandırılması söylendiği gibi gerçekten gerçekçi değil. Kullanıcılar konumu sık sık değiştirir. Cep telefonlarında olduğu gibi dizüstü bilgisayarlarda da; örneğin esnek çalışma. Yapabileceğiniz en iyi şey, bu mesafeyi kat etmek için zamanla bazı GeoIP kontrolleri; Gmail’in yaptığı gibi.
Lode

5

Amazon (ve diğerleri) hibrit bir yaklaşım kullanıyor. Tarama, alışveriş sepetine ürün ekleme ve daha önce kullandığınız kredi bakım / gönderim adresi kombinasyonlarını kullanarak sipariş verme için otomatik giriş sağlar. Ancak, kredi kartı ekleme, gönderim adresleri ekleme / değiştirme, şifreleri güncelleme, geçmiş siparişleri görüntüleme (isteğe bağlı olarak kullanıcıya) ve diğer birçok hesap ayarı gibi birçok işlem için şifrenizi girmenizi gerektirir.

Yani, bilgisayarınıza erişen insanlar oturumunuzu ele geçirebilir, ancak yine de sipariş ettiklerini elde edersiniz! (Daha da önemlisi, bir oturumu ele geçirme teşviki hemen hemen reddedilir.) Ama birisi bilgisayarıma erişebiliyorsa, ortalama site oturumlarını çalan insanlardan daha büyük problemlerim var.

Uygulamanızın güvenliği yüksek olmayan kısımlarınız varsa, kullanıcıları sitenin düşük güvenlikli bölümlerine otomatik olarak oturum açmak için bir oturum kimliği (karma veya istediğiniz herhangi bir şey) depoladığınız karma bir model seçebilirsiniz. , ancak daha yüksek güvenlik alanlarına girildiğinde şifreyi girmelerini ve oturum sona erdiğinde yüksek güvenlik kodunu silmelerini gerektirir.

Tabii bu bir bankacılık düzeyinde bir site ise, otomatik giriş daha bir seçenek değildir. Yine, bu tür güvenlik kullanan siteler korudukları verinin değerini varsayar ve kullanıcıya ek kolaylık, ele geçirilen bir oturumun potansiyel riskini tartar. Uygulamanız için durumun böyle olmadığını düşünüyorsanız, otomatik girişleri uygulamayın. Kullanım durumunuz için hangi düzeyde güvenlik / kullanılabilirlik ödünç verme işlemlerine uygun olduğunuza erişmeniz gerekir.


2

Aslında o kadar da zor değil. İlk olarak şu formatta bir çerez saklayın:

userID.token

Jeton için bir sha1 karması kullanabilirsiniz. Daha sonra remember_me_tokens veritabanı tablosu deposu userID'nizde, jetonun bir bcrypt karması ve jetonun üretildiği zaman.

Daha sonra birisi sitenizi ziyaret ettiğinde, çerezin ayarlanıp ayarlanmadığını kontrol edin. Çerez ayarlanmışsa, son 7 gün içinde veritabanında geçerli bir satır olup olmadığına bakın. Çerez için veritabanında geçerli bir satır varsa, oturumu kullanıcının oturum açtığını gösterecek şekilde ayarlayın ve aynı zamanda eşleşen çerez / veritabanı satırını silin ve yeni bir çerez / jeton / veritabanı satırı oluşturun.

Oturumu kapatırlarsa, çerezi silin.

7 günden daha eski remember_me_token'leri budamak için bir cron işi çalıştırın.


Birinin bu anahtarı kopyalamasını ve makineye yapışmasını ve kullanıcı adı veya şifre olmadan hesaba erişmesini ne engeller?
Jay Simon

anahtarı nasıl alacaksın? birinin bilgisayarında yerel olarak depolanır.
Ryan

bilgisayara kadar yürüyün ve depolandığı dosyayı açın :)
Jay Simon

2
@JaySimon Aynı argüman, bilgisayarlarını kilitlemeden giriş yapan ve 5 dakika boyunca uzaklaşan veya Beni Hatırla'yı tıklayan ve hesap parolasına atlayan birisi için de yapılabilir. Bu olası güvenlik durumunu kabul edebiliyorsanız, rahatlığı güzeldir, ancak bu yüzden CIA NOC listesinde Beni Hatırla özelliğini görmüyorsunuz :) Sunucu, istemcinin saklaması gereken bir tür belirteç vermelidir dosya sisteminde. Ancak artık sunucu açısından elinizde değil.
maple_shaft

@maple_shaft Neden kimse bunu dropbox yapmak için şaşırdı? (Soruma
bağladım

0

Yalnızca cihazı sakladığınız cihaza güveniyorsanız yapabilirsiniz. Ne kadar güvenli olduğu (cihazı etkileyemiyorsanız) kullanıcıya bağlıdır. Sadece elleriniz dışında.

Yorumlarda belirtildiği gibi:

Bu, güvendiğiniz şeyle ilgilidir. Makinenin kimliğini saklamıyorsanız, sorun budur. Eğer anahtarlığa güveniyorsanız, o zaman alacağınız maksimum güvenlik budur. Elbette, cihaz donanımını veya başka bir şeyi tespit etmek gibi özel güvenlik ekleyebilirsiniz, ancak hepsi sahte olabilir, böylece sonunda bilemezsiniz. Sizin kontrolünüz dışında.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.