Şifre doğrulama;

9 Cevap php

Herkesin kendi ürünlerinin reklamlarını koymak bir seri ilanlar sitesi var.

Her sınıflandırılmış için, kullanıcı (istedikleri zaman onlar sınıflandırılmış silebilir, böylece) bir parola girmek zorundadır.

Biri gizli silmek istediği zaman Yani temelde, onlar gizli tıklayın sil düğmesine tıklayın ve pas girin.

Ben bir veritabanı olarak MySQL kullanabilirsiniz.

Temelde bu kodu kullanabilirsiniz:

if ($pass==$row['poster_password'])

satır [poster_password] MySQL getirilen nerede ...

What do you think? Thanks

9 Cevap

Bu bakınız: http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords

Veritabanına yolda (belki biraz tuz ile) kendi şifrenizi karma. Veritabanına (NOT onların gerçek şifre) kendi karma parola saklamak. Ardından veritabanından kendi karma şifresini almak ve giriş şifresini karma ve karma şifreleri karşılaştırın.

Bazı topal sahte kod:

password_hash = hash(password_cleartext)
# store password_hash in database

Sonra:

input_password_hash = hash(input_password_cleartext)
fetched_password_hash_from_db = fetch(db, password_hash)
if (input_password_hash == fetched_password_hash_from_db) {
    ... authenticated ...
}

Php ile bir başlangıç ​​için, deneyin: http://php.net/manual/en/function.sha1.php

Sizin kod güvenli görünüyor, ama tasarım bazı iş gerekebilir.

SQL Injection

Kodun tehlikeli kısmı veritabanında bir şey depolama ya da kullanıcı için bir şey gösteren, yani kullanıcıdan toplanır. Yani, parçası öncesinde örnek oluşur dikkatli olmak zorunda. Eğer filtreleme, doğrulama ve şifre ve reklam bilgiler dahil olmak üzere kullanıcı toplamak herhangi bir veri, kaçıyorlar emin olun.

Encryption

Veritabanındaki parola saklamanın avantajı da onu kaybedersiniz eğer kullanıcı e-posta veya başka yollarla parolasını almak sağlayabilirsiniz olmasıdır.

Eğer mağaza şifreleri yaparsanız birileri veritabanına erişimi okuma yönlendirmek mümkün olup olmadığını, onlar düz metin olarak tüm şifreleri okuyamıyor böylece Ancak, size, gizli bir anahtar kullanarak, onlara şifreli saklamak gerekir. Yine de, bir yerde gizli anahtarı saklamak zorunda gidiyoruz, ve birinin gizli anahtarı alır ve veritabanına erişimi varsa, onlar şifreleri tüm erişimi olacaktır.

Hash Values (recommended)

Bu en iyi uygulama ve yerine gerçek şifreleri sadece veritabanında şifreleri tek yönlü hash değerleri (SHA1 veya SHA256) depolamak için daha güvenli bulunuyor. Bu şekilde, parolayı alamaz. Hash değerleri bilerek bazı verileri atmadan tek yoldur.

Bunun yerine orijinal şifre almak yerine, kullanıcının girdiği şifreyi karma ve maçları görmek için saklanan karma değere karşı karma değerini karşılaştırın. Bu durumda kullanıcı şifresini kaybederse, yerine kullanıcıya şifreyi e-posta gönderme, sen kullanıcıya yeni, rasgele oluşturulmuş bir şifre e-posta.

Sadece hash değerini saklama kullanıcı veritabanına okuma erişimi olsa bile, karma değerler hiçbir avantajı sunan bu yana, hatta daha verilerinizi korur ve hash değerlerinin tüm kilidini olacak sır anahtarı yoktur.

Eğer şifreleri karma yaparken, gökkuşağı saldırılara karşı sağlamalarının listenizi korumak için rastgele bir tuz değerini kullanın ve tuz saklamak için emin olun.

Summary

Bazen şifre seçmek için alamadım. Mümkün olduğunda bazen şifre başka bir sistem geliyor, bu yüzden her zaman bir seçim yok, ve bazen üstleri (hatta belki de kullanıcılar) onlar şifreleri almak mümkün olmasını talep edecektir, ancak, daha güvenli seçenek seçmelisiniz .

Bu şifreleme ve hash değeri tüm iş sadece kısmi verilere sadece okuma erişimi elde edebiliyoruz insanlara karşı sunucusu korur unutmayın. Bazen, veri almak, bir ödül yeter, bu nedenle kullanıcı parola karma okuyabilir, onlar kredi kartı numaraları okuyabilir?

Eğer veritabanını korumak gerekir. Eğer veritabanı sistemi üzerinde güvenli bir şifre var mı? Yalnızca veri yerel erişim izin veriyor musunuz? Eğer uygulamada kullanmak için en az ayrıcalıklara sahip bir veritabanı kullanıcı oluşturduk? Eğer düzgün bir SQL enjeksiyonu ve betik saldırılarına karşı kendinizi korumak mı?

Birisi okuma ve veri yazma erişimi varsa, tüm şifre iş tartışmalı olur.

Veritabanında gerçek şifre tutmayın. Bunun yerine bir sağlama (MD5, SHA1, vb) depolamak. Karşılaştırmak istediğiniz zaman, kullanıcının gönderdiği değerin bir sağlama yapmak ve toplamlarını karşılaştırın.

Bu şekilde bellekte gerçek şifre asla.

En iyi uygulama veritabanındaki bir tuzlu sha1 karma tutmak için:

if (sha1($pass.$row['poster_salt'])==$row['poster_password'])

(Poster_salt oluşturulan ve kullanıcı şifresini seçtiğinde kaydedilen rastgele bir dizedir.)

(- Çoğu insan farklı siteler için farklı şifreler seçmek için zahmet etmeyin, muhtemelen çok başka bir yerde kullanılan) bir saldırganın veritabanına erişimi alırsa bu şekilde, hala kullanıcıların şifreleri almazsınız.

Ayrıca, güvenli (HTTPS) bağlantı kullanmanız gerekir. Ve yeterince güçlü bir parola gerektirir.

(En azından basit bir reklam liste halinde bir overkill olabilir iyi bir güvenlik, isterseniz).

Ben kullanıcı (yukarıdaki örnek kod başına) düz metin girilen ne karşı kontrol edebilirsiniz yüzden alınırken sonra şifresini, saklamadan önce parolayı şifrelemek olacaktır.

Ayrıca, herhangi bir SQL injections karşı kendinizi korumak, ya da birisi veritabanındaki tüm şifreleri (ve diğer verileri) görebiliyordu.

Bu şifreleri şifrelenmemiş şifreleri yerleştirilir anlamına gelir. Bu şifreleri girerken şifreleme çeşit kullanarak olmalıdır durumda. Bunu yapmanın bir yolu, şifreyi sağlamalarının MD5 fonksiyonudur.

Insert yaparken yapardın

Insert into table(email, password, whatever) values('$email', md5($password), whatever)

Ve karşılaştırırken sen yapardın

if (md5($pass) == $row['password'])

Eğer bir şekilde parola karma ve saklamak ve karma sürümünü kullanarak karşılaştırmak gerekir. Daha fazla bilgi için bu bağlantıyı bakın:

http://phpsec.org/articles/2005/password-hashing.html

benim önerim şudur

kullanıcıların tablo iki sütun, "şifre" denilen bir ve diğer "tuz" var

$password =  'youruserpassword in plain text';
$salt = bin2hex(openssl_random_pseudo_bytes(32));
$passtostore = hash_hmac('sha384', $password, $salt);
insert into users(password, salt) values($passtostore, $salt);

Kullanıcı doğru parolayı girdiğinde sonra doğrulamak için ...

veritabanından parola ve tuz hem alınamadı ve

if(hash_hmac('sha384',$userpass, $row['salt']) === $row['password']) { 
 // is valid 
 }

Eğer soran olsaydı, bu kod veritabanında saklanan şifreyi kontrol edecek - Evet, o olacak.