Her şeyden önce, bu mu DEĞİL uygulamanızın güvenliğini artırmak (varsayarak bir webapp).
SSL kullanın (veya aslında genellikle SSL olarak adlandırılan TLS), gerçekten pahalı değil (Etrafında yollar bulmak için kullandığınız zamanı ölçün ve asgari ücretle çarpın, sertifika satın almak neredeyse her zaman kazanır).
Bunun nedeni basit. TLS, kriptografide oldukça büyük olan bir sorunu (satın alınan sertifikalarla kullanıldığında, kendinden imzalı değil) çözer: Konuştuğum sunucunun konuştuğumu düşündüğüm sunucu olduğunu nasıl anlarım? TLS Sertifikaları şunu söylemenin bir yoludur: "Tarayıcınızın güvendiği sertifika yetkilisi, [url] adresindeki web sitesinin bu genel anahtara sahip olduğunu onaylar ve buna karşılık gelen bir özel anahtara (özel anahtar) yalnızca sunucunun bildiği İmzamı belgenin her yerine imzaladım, eğer biri değiştirdiyse görebilirsin ".
TLS olmadan şifreleme anlamsız hale gelir, çünkü yanınızda bir kafede oturursam, dizüstü bilgisayarınızın / akıllı telefonunuzun sunucu olduğumu ve MiTM (Ortadaki Adam) olduğunuzu düşünmesini sağlayabilirim. TLS ile, sitenizle eşleşen sertifika yetkilisi imzalı bir sertifikam olmadığı için dizüstü bilgisayarınız / akıllı telefonunuz "GÜVENİLİR BAĞLANTI" diye bağıracak. (Şifreleme ve Kimlik Doğrulama).
Sorumluluk reddi: kullanıcılar şu uyarıları sağ tıklama eğilimindedir: "Güvenilmeyen bağlantı? Ne? Sadece kedi fotoğraflarımı istiyorum! İstisna Ekle Onayla'yı tıklayın YAY tıklayın ! Yavru kediler!"
Bununla birlikte, gerçekten bir sertifika satın almak istemiyorsanız, yine de istemci tarafı javascript karma oluşturma YAPIN (ve bunun için standford kitaplığını (SJCL) kullanın, KRİPTO'U KENDİNİZE ASLA UYGULAMAYIN ).
Neden? Parolanın yeniden kullanılması! HTTPS olmadan oturum tanımlama bilginizi (bu da sunucunuza sizmişim gibi davranmama izin verir) kolayca HTTPS olmadan çalabilirim (bkz. Ateş sayfası). Bununla birlikte, oturum açma sayfanıza, göndermeden önce parolanızı karma hale getiren bir javascript eklerseniz (SHA256 kullanın veya daha iyisi, SHA256 kullanın, onlara oluşturduğunuz bir genel anahtar gönderin ve ardından parolayı bununla şifreleyin, bir tuz kullanamazsınız bununla) ve ardından karma / şifrelenmiş parolayı sunucuya gönderir. Sunucunuzdaki hash'i bir tuzla YENİDEN HABERDAR EDİN ve bunu veritabanınızda depolananlarla karşılaştırın (parolayı şu şekilde saklayın:
(SHA256(SHA256(password)+salt))
(tuzu veritabanında düz metin olarak da kaydedin)). Ve şifrenizi şu şekilde gönderin:
RSA_With_Public_Key(SHA256(password))
ve şifrenizi şu şekilde kontrol edin:
if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok
Çünkü EĞER Birisi müşteri koklama edilir, bunlar istemci (oturum kaçırma) olarak giriş mümkün olacak ama olacak ASLA (düz metin parolası bkz onlar javascript değiştirmek sürece, ancak, bir korsan muhtemelen belgede; anlayamayacaksınız / ilgi Starbucks Bu yüzden web uygulamanıza erişecekler, ancak e-postalarına / facebook / vb. (kullanıcılarınız muhtemelen aynı parolayı kullanacaktır). (E-posta adresi ya giriş adı olacaktır ya da web uygulamanızdaki profillerinde / ayarlarında bulunacaktır).