Bir web sitesi için “beni hatırla” uygulamanın en iyi yolu nedir? [kapalı]


510

Web sitemin, kullanıcıların web sitemi her ziyaret ettiklerinde giriş yapmaları için tıklayabilecekleri bir onay kutusu olmasını istiyorum. Bunu uygulamak için bilgisayarlarında bir çerez saklamam gerekeceğini biliyorum, ama bu çerezde ne olmalı?

Ayrıca, bu çerezin hala 'beni hatırla' işlevselliği verirken önlenebilecek bir güvenlik açığı sunmasını önlemek için dikkat edilmesi gereken yaygın hatalar var mı?


5
Kontrol stackoverflow.com/questions/549/... (üst cevabın bölüm II)
Frosty Z


1
Güvenlik SE hakkında bazı yararlı bilgiler var ~ security.stackexchange.com/questions/19676/…
b1nary.atr0phy

Splattne tarafından şu anda kabul edilen cevap aşırı derecede karmaşıktır. Rastgele bir kaynaktan +16 bayt jetonu oluşturun, hash yapın ve hash + hesap kimliğini veritabanına kaydedin. Daha sonra belirteci kullanıcıya HTTPS + httpOnly çerezinde gönderin (Javascript buna erişemez / çalamaz). Bu şekilde, hiç kimse jetonu tahmin edemez veya geçersiz tahminlerle insanları kapatamaz, ancak veritabanınız saldırıya uğramış olsa bile hiç kimse veritabanındaki jetonları kullanamaz (karmalanır). Böylece yalnızca orijinal istemci (veya bir şekilde tarayıcı deposundan jetonu çalan biri) kullanabilir.
Xeoncross

Yanıtlar:


536

Geliştirilmiş Kalıcı Giriş Çerezi En İyi Uygulaması

Burada açıklanan bu stratejiyi en iyi uygulama (2006) veya burada açıklanan güncellenmiş bir strateji (2015) olarak kullanabilirsiniz:

  1. Kullanıcı Beni Hatırla işaretli olarak başarılı bir şekilde oturum açtığında, standart oturum yönetimi çerezine ek olarak bir oturum açma çerezi verilir .
  2. Giriş çerezi bir dizi tanımlayıcısı ve bir belirteç içerir . Seri ve jeton, uygun şekilde geniş bir alandan tahmin edilemeyen rastgele sayılardır . Her ikisi de bir veritabanı tablosunda birlikte depolanır , belirteç karma (sha256 iyidir).
  3. Giriş yapmamış bir kullanıcı siteyi ziyaret ettiğinde ve bir giriş çerezi sunduğunda, seri tanımlayıcısı veritabanında aranır .
    1. Eğer seri tanımlayıcı mevcut olduğu ve karma belirteç eşleştiği seri tanımlayıcı için karma, kullanıcı kabul edilir doğrulanmış . Bir yeni belirteç belirteci için yeni bir karma eski kaydın üzerine depolanır, oluşturulur ve yeni bir giriş çerez kullanıcı (o yeniden kullanmanın uygun olduğu için verilir serisi tanımlayıcı ).
    2. Seri mevcut ancak belirteç eşleşmiyorsa, hırsızlık olduğu varsayılır. Kullanıcı güçlü bir şekilde uyarılmış bir uyarı alır ve kullanıcının hatırladığı tüm oturumlar silinir.
    3. Kullanıcı adı ve seri mevcut değilse, giriş çerezi yoksayılır .

Bu yaklaşım derinlemesine savunma sağlar. Birisi veritabanı tablosuna sızmayı başarırsa, saldırgana kullanıcıların kimliğine bürünme için açık bir kapı sağlamaz.


20
ayrıca bkz: stackoverflow.com/questions/549/… 'geliştirilmiş' sürümü
okumamalısınız

8
Bununla ilgili sorun, çerezin kullanıcı adını ifşa etmenizdir, ancak Gmail'in yaptığı budur. Neden hem seri kimliğine hem de jetona ihtiyacınız var? Daha büyük bir jeton iyi olmaz mıydı?
Dan Rosenstark

10
Ayrıca, bu model ile ilgili olarak, bir saldırganın çalmasını önlemek ve çerezi bilgisayarına yerleştirmekten ve çerezleri saldırıya uğramış bilgisayardan silmekten daha fazlası. Bilgisayarı daha önce bile hack bilgisayar kesmek ile gerektiği gibi doğrulanmış ve güncellenmiş olurdu? Tek değişiklik, saldırıya uğramış bilgisayarlar kullanıcısının tekrar oturum açması ve beni hatırlaması için ayarlanması gerektiğidir. Saldırıya uğramış kullanıcının bunu fark edip etmediği belirsiz olacaktır.

24
@HiroProtagonist Seri Tanımlayıcısı bir DoS saldırısını önlemektir. Bu olmadan, hızlı bir şekilde sitenize isabet eden bir komut dosyası yazıp her kullanıcı adı ve geçersiz bir jeton yazıp sitenizdeki herkesi oturumdan çıkarabilirim.
Chris Moschini

6
Bu çözüm YANLIŞ, cuncurrency işlemez: İki hatırla kimlik doğrulama isteği aynı anda gelirse, aynı hatırla çerezi ile, ilki başarılı olur ve değiştirir, ikincisi başarısız bir kimlik doğrulamasına neden olur ve yanlış alarm (çünkü ilk istekte jeton zaten değiştirilmiş olduğundan). (Bu durum, tarayıcı başlatıldığında ve site iki tarayıcı sekmesinde geri yüklendiğinde gerçekleşebilir.)
slobo

9

Bir kullanıcı kimliği ve bir jeton saklayacağım. Kullanıcı siteye geri döndüğünde, bu iki bilgiyi veritabanı girişi gibi kalıcı bir şeyle karşılaştırın.

Güvenlik gelince, oraya birisinin ekstra faydalar elde etmek için çerezde değişiklik yapmasına izin verecek hiçbir şey koymayın. Örneğin, kullanıcı gruplarını veya şifrelerini saklamayın. Güvenliğinizi aşacak şekilde değiştirilebilecek hiçbir şey çerezde saklanmamalıdır.


8

UserId ve RememberMeToken depolayın. Beni hatırlattıklarında giriş yaptıkları zaman yeni bir RememberMeToken oluşturun (işaretli diğer makineleri geçersiz kılar beni hatırla).

Döndüklerinde onları hatırla jetonuna bakın ve UserId eşleştiğinden emin olun.


Bu saniyeler içinde kaba zorlanabilir. Kullanıcı_kimliğimi 1 olarak ayarlayacağım ve tüm simgeleri kaba kuvvet uygulayacağım. Saniyeler içinde bana erişim
A Friend

4

Kalıcı oturumları kendim araştırırken bunun güvenlik riskine değmeyeceğini buldum. Kesinlikle yapmanız gerekiyorsa kullanın, ancak böyle bir oturumu yalnızca zayıf bir şekilde doğrulanmış olarak düşünmeli ve bir saldırgan için değerli olabilecek herhangi bir şey için yeni bir giriş yapmaya zorlamalısınız.

Nedeni, kalıcı oturumunuzu içeren çerezlerinizin çok kolay çalınmasıdır.

Çerezlerinizi çalmanın 4 yolu ( cevabını temel alan sayfadaki Jens Roland tarafından yapılan bir yorumdan@splattne ):

  1. Güvenli olmayan bir hat üzerinden keserek (paket koklama / oturum kaçırma)
  2. Kullanıcının tarayıcısına doğrudan erişerek (kötü amaçlı yazılım veya kutuya fiziksel erişim yoluyla)
  3. Sunucu veritabanından okuyarak (muhtemelen SQL Injection, ancak herhangi bir şey olabilir)
  4. Bir XSS kesmek (veya benzer bir istemci tarafı kötüye kullanımı) tarafından

104
1. HTTPS bunu önlemek için tasarlanmıştır. 2. Giriş Yapın Burada güvenlik sorunu değil, daha büyük sorunlarınız var. 3. 2 ile aynı. 4. Bu, erişim kontrol politikası ve iyi girdi sanitasyonu ile önlenebilir; bu adımları atmazsanız, tekrar Giriş Yaptığınızdan daha büyük sorunlarınız olur.
Chris Moschini
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.