PHP şifreleri kodlamak için en iyi yoldur

7 Cevap php

I currently use,
base64_encode() to encode a user's password, this works well because it allows me to simply use base64decode() to decode the password to a word and send to there email if they lose there password.

Gerçi parolası üzerinde okuma edilmiştir ve bir sürü insan size sha1() bir parola kodlamak için kullanmak gerektiğini söylemek gibi görünüyor. Ben sisteminizin güvenliğini artırmak için tüm değilim ama ben kullanmak için dönüştürmek ise shal() sonra ben orada kayıp şifreyi bir kullanıcıya göndermek için mümkün olmayacaktır.

SİZ ne kullanıyorsunuz? Bana biraz tavsiye verebilir miyim? Ve bir kullanıcı e-posta okunabilir bir şifre Decod için bir yolu var mı?

Ben bu soruyu yazdığınız gibi ben sadece bazı forumlarda istendiğinde size bir parola göndermek yerine şifrenizi yeniden ayarlamak için özel bir bağlantı göndereceğiz yok remebered, ben onlar belki şifrenizi çözmesi mümkün değildir, çünkü bu olduğunu tahmin ediyorum?

//what I use now
$password_encoded = base64_encode($password);

//what I am considering using
$password_encoded = sha1($password);

7 Cevap

, Kullanıcıların uğruna any çevrilebilir biçimde kendi şifreleri tutmayın lütfen! if it is reversible, it is exactly as secure as if you didn't encode it at all - bu Base64 kodlanmış veya triple-DES 168-bit encryption ise önemli değildir.

Kendisi veya kullanıcılara (veya anlamda bir yalamak vardır) koruyan herhangi bir ilgi var No sitesi E-posta yoluyla bir kullanıcı kendi şifre göndereceğiz. Bunu sağlamak için bile uzaktan yakın yapabileceğiniz tek şey onlara yeni bir parola ayarlamak sağlayan benzersiz, tek kullanımlık bağlantı ile kullanıcılara bir e-posta göndermektir.

  • (bcrypt veya PBKDF2) olmuştur şifre salted karma Mağaza
  • En kısa sürede bunu karma ettik orijinal şifre atmak. Belleğinden tüketim.
  • Her zaman SSL kanalı üzerinden kendi yeni şifrenizi oluşturmak için kullanıcı gerektirir

Başka bir şey ile almak için çalışıyor dürüst sadece ihmal olduğunu. Güvenlik tartışmalarda kullanılan çok yaygın bir senaryo kullanalım:

Kullanıcı Frederic e-posta tehlikeye düşer. Bu kilidi onun bilgisayarını bırakarak ya da zayıf bir parola kullanarak olabilir. Ne olursa olsun, yetkisiz bir kişinin mesajlarına erişimi vardır. İdeal olarak, bu bir yabancı tarafından okunan bazı utanç verici aşk mektupları başka bir şey anlamına gelecektir. Ne yazık ki, yetkisiz kişi forum düz metin Frederic şifresini e-posta göndereceğiz keşfeder. Çoğu kullanıcı gibi, Frederic onun online bankacılık dahil her şey için aynı şifreyi kullanıyor. Onun adı, onun bankadan gelen e-postadaki listelenir. Şimdi durum çok talihsiz bir durumdur.

Sizinle bir kimlik-temelli ilişki oluşturmak, kullanıcıların size güven koyuyoruz. Bu güven bir parçası sizin ve aralarında güvenli bir sır olarak bu kimlik bilgilerini tutacak olmasıdır.

Related

Çevreleyen sorunlar ve fikirlerin bir sürü SO çok iyi cevap olmuştur:

Bir yönetici olarak, you never actually need to recall the password of a user. Sadece bir kez teslim ettik bir dize, başka özdeş olup olmadığını bilmek gerekir.

Bir kullanıcı parolasını unutursa, onlar sadece onları yeni bir tane sağlayabilir var, onların eski şifreyi söylenmesi gerekmez.

Bir crytographic hash kelime kullanarak, gerçek şifreleri bilmek gerek yok çünkü bunları saklamak için güvenli bir yol gibi görünüyor. Ancak, ön-bilgisayarlı dizeleri büyük tablolar geri orijinal dize bulunuyor kolayca karma bir ters arama yapmak için yapılmıştır. Bu denir rainbow tables.

Öncesi bilgisayarlı dize kolay arama önlemek için gereken salt şifreleri onları karma önce. Tuz kolayca kimlik doğrulaması sırasında şifre ekleyebilirsiniz kalıcı kullanıcı var ne olursa olsun ekstra bilgi, onların adı önüne, ya da kullanıcı kimliği postfikse olabilir.

Bir kullanıcı bir parola sıfırlama izin ama onların şifresini ALMA asla. Yani bunun yerine bunu deşifre sağlayan şifreleme formun bir tek-yönlü hash (SHA2) kullanmak isterim neden olduğunu.

Açık e-posta bırakılırsa düşünün. Ben sadece, bazı web sitesi için şifrenizi almak e-posta silmek, ve asla bilemez talep olabilir. Yerine şifrenizi sıfırlamak için beni gerekirse Öte yandan, hesap parolası değiştirmek istiyorsunuz ve sahibi belli şeylerin yanlış olduğunu fark eder. (Bu aptalca bir senaryo ama konsept önemli şeydir)

Sağlamalarının eşleşen karma üretilene kadar kelime (veya gökkuşağı tabloları kullanarak) tüm olası kombinasyonları deneyerek "ters" olabilir. Bunu önlemek için bir yolu eklemek için / prepend bir tuz ile sağlanan şifre çok uzun ve öngörülemeyen dize yapmak. Tuz bireyin hesap için benzersiz bir veri benzersiz dize olmalıdır.

PHP hiçbir SHA2 functon yoktur. SHA-2 (vb SHA-256, SHA-384, SHA-512, ..), hash algoritmalar bir aile

hash('sha256', 'The quick brown fox jumped over the lazy dog.');

Mutlak Jeff'in kendi You're Probably Storing Passwords Incorrectly bu konu üzerinde okunması gerekir. Burada yönetici özeti bulunuyor:

  1. Kendi "akıllı" bir şifre depolama düzeni icat etmeyin.
  2. Düz metin olarak şifreleri saklamak asla.
  3. Depolamak her şifre için uzun, benzersiz rastgele tuz ekleyin.
  4. Bir kriptografik olarak güvenli karma kullanın.

Base64Encode teklif no güvenlik, herkes kolayca ters çünkü.

Eğer absolutely şifreyi ters gerekiyorsa, iyi bir şekilde gizli bir soru kullanmak için, ve bir şifreleme anahtarı olarak cevap kullanmaktır. Şifre şifrelenir sonra, (Bunu saklamak değil) cevabı atmak. Eğer o doğru şifreyi girmek olduğunu doğrulamak gerektiğinde de zaman standart sha1 şifreleme kullanın. Kullanıcının kendi şifresini istiyorsanız, o da gizli sorunun cevabını girin ve şifreyi geri ve ona geri göndermek için kullanabilirsiniz.

Sadece hash tabanlı şifreleme gibi güvenli değil, ama sen şifreyi geri göndermeniz gerekir eğer iyi bir uzlaşma.

Sen php için mcrypt kütüphaneye bakmak isteyebilirsiniz http://ca3.php.net/mcrypt

Ben her zaman sadece herhangi bir e-posta siteleri benim şifre hesabımı silin. Ben düz metin olarak bana gönderilmesi için uzun rastgele şifreler ezberlemeye içine çok fazla çaba ve zaman koymak.

Parolayı tanımlamak için sha1 () veya daha yüksek geri dönüşlü olmayan karma kullanın. Bir kullanıcı parolası kimlik doğrulaması yaparken, karma almak ve kimlik doğrulaması sırasında verilen parola hash ile karşılaştırın. Eğer uyarsa, o zaman kullanıcı makul standartları içinde otantik.

$user = "joe";
$password = 'password';

$saved_hash = DB::Query("select hash from users where username = ".quote($user)." LIMIT 1");

if (sha256($password) == $saved_hash) User::authenticated();

Hiç e-posta şifreleri göndermek asla. : PHP gibi bir benzersiz, öngörülebilir olmayan, üretilen anahtar, gönder

$key = sha256(time().rand().$secret_seed);

Yeni bir parola ayarlamak için, bir kez kullanılmak üzere, istemci için bu tuşa gönderin.

Siz "tuz" ile bir karma (tercihen sha1) kullanmak isteyeceksiniz