Kalıcı (ne olursa olsun ne kadar küçük) istemci tarafı depolama web üzerinden olması için herhangi bir yolu var mı?

10 Cevap php

Okay, since none of you guys like my question, let me rephrase it.

Kullanıcı bir HTML forma kaydeder. JavaScript ile, onların şifresi (çok tuzlu) lokal olarak sağlaması. Sunucu şifre + tuz ne olması gerektiğini bilir, kullanıcı zaten blahblahblah, kayıtlı. Şimdi kullanıcı bir sayfa ister. Sunucu kullanıcıya rasgele kimliği gönderir. Kullanıcı sonraki sayfayı yüklediğinde, bu rastgele ID onlar yerel olarak karma oluyor, sakladığınız anahtarına eklenir ve BU sunucusuna gönderilir. Sunucu bu anahtarı ne olduğunu bilir ve rasgele kimlik, aynı karma gerçekleştiren ve karşılaştırır. Eğer uyarsa, tebrikler, bu doğru bilgisayardan geldi. Değilse, o zaman birisi TCP / IP trafiğini koklama oldu.

Tüm bu aksi takdirde bu son derece gereksiz olurdu, tabii ki without SSL.

Benim soru - NASIL bir istemci bilgisayar KEY saklamak?

Original Post:

Merhaba;

Ben bir PHP İçerik Yönetim Sistemi geliştirilmesi üzerinde çalışıyor, ve güvenli bir giriş sistemi ile geldi ediyorum. Aksi halde kullanıcı her sayfa yük kendi parolasını yazmanız gerekir - Tek sorun (çok küçük bir anahtar için, uzunluğu 40 karakter) istemci tarafı depolama çeşit gerektirecektir olduğunu.

PHP veya JavaScript kullanarak, bir müşterinin PC üzerinde bir küçük 40-karakter dizesi saklamak bir daha geri alabilirsiniz, bir yolu var mı?

EDIT: KURABİYELER bir seçenek değildir. Bu 40 karakter dizesi müşterinin bilgisayarı terk edemez, ve tüm set çerezleri her HTTP başlık ile gönderilir.

TEKRAR - COOKIES ARE INSECURE AND NOT A VIABLE OPTION FOR THIS.

Bana bu gibi yeniden işleme izin - istemci HTTP formu gönderir. Bazı betik dili (örn: JavaScript) ile, şifre şifreli sunucuya gönderilen DEĞİL formu, sıyrılır, ve ben almak ve gelen kullanıcıya gönderilen bir anahtar ile karma tarafından (doğrulamak istemci tarafı, tutulur sunucu). Bu doğrulama sunucusuna gönderilir, never the key.

10 Cevap

Sen istemci üzerinde devlet tutmak için farklı hileci bir çift kullanabilirsiniz, bir üst düzey kareyi tutmak ve orada bir javascript değişkeni saklayabilirsiniz.

Flash local "SharedObject" kullanabilirsiniz,

Silverlights 'IsolatedStorage

ya da Google Gears eşdeğerdir.

ama ..

Bu düşünce çizgisini takip etmeyin. Sen SSL gerekir. Eğer ayak app kullanarak vurursa bir şey ya da birisi yapacağız, güvenli bir şey inşa etmek için gidiş değildir.

Veri aktarımı güvenli anahtarlarını kullanan bir tarayıcı tabanlı bir sistem zaten var. Bu SSL denir.

Öncelikle "Ben bir çerez kullanmadan istemci tarafında veri saklayabilirsiniz" sorusuna cevap olacak:

  • Bir Flaş SharedObject kullanabilirsiniz, ama tabii Flaş gerektirir ve kullanıcı izin için onay kutusunu tıklatın zorundadır.
  • HTML5 istemci tarafı veritabanları sahiptir, bu yüzden sizin için başka gelişmekte olan bir seçenek var.
  • Istemci tarafında Google Gears kullanmak ve kendi yerel database API kullanın

ANCAK - amaçlarınız için size şifreyi iletmek ama bir karma gönderir olmayan bir giriş formu mühendis olabilir. Sizin PHP komut dosyası gizli tuz değerini içeren bir formu göndermek istiyorsunuz, ve daha sonra göndermek olay takar ve tuzlu karma ile girilen şifreyi değiştirir bazı javascript var.

Ben bir PHP geliştiricisi değilim ama önceden varolan kimlik doğrulama sistemleri için arama savunacağını söyledi. Bunlar daha sık değil sen (bu birincil amaç olması gibi) yazmak ne biraz daha güvenli olacaktır. Ayrıca kodu gözden geçirmek ve bunu nasıl yaptığını görmek ve neden anlamaya olanak sağlayacak.

Edit: Neredeyse always sunucusunda kimlik doğrulama işlemek istiyorum. Bir çerez veya url param şeklinde kullanıcıya oturum bilgilerini aktarmak için kabul edilebilir ama asıl işlem sunucu üzerinde yapılmalıdır. Aksi takdirde büyük riskler kendinizi açıyoruz.

Use a cookie if you want to save it between browser visits. It'll be stored on the client's machine.

Use a session if you want to save it for a shorter duration. It'll be stored on the webserver.

Eğer internet üzerinden gitti hiç bir şey yaratmak istedim, temelde JavaScript tüm yapmak gerekir.

Öncelikle, Google Gears gibi bir şey başlayan bir kod parçası oluşturun. Anahtarını saklamak için Google Gears veritabanını kullanın.

Sonra, sayfaları geri kalanı üzerinde, Google Dişli veritabanında anahtarını denetler javascript bir parça var. Anahtar geçerli değilse, anahtarını silin kullanıcıyı yönlendirmek ve onları tekrar giriş yapacak.

Çerezler yapmak için bir yoldur, ancak bir tanımlama herhangi bir şifre saklamak olmaz ki (neredeyse) bir emirdir ;-) bulunuyor.

You could use session to store information between page load on the server side. http://fr.php.net/manual/en/book.session.php

Eğer HTML 5 spec kullanabilirsiniz eğer, o zaman yerel depolama yararlanabilirsiniz, Bryan ne diyor ekleme.

http://ajaxian.com/archives/webkit-does-html5-client-side-database-storage

Ben senin yaklaşımı ile sorun bakın. İlk JavaScript ilk yük kokladı olabilir, bu nedenle tuz algoritma hacker korumalı değildir. Sonra ID da "public" dir. Yani Eğer (Yanılıyorsam beni düzeltin lütfen) aşağıdaki şema var gibi görünüyor:

password + SHA1 => hashed password
hashed password + (ID from server) + (salt from server) => mega hashed password

Gerçekten "mega parola karma" neden görmek için bir sorun var karma daha güvenlidir.