Ben Kohana v 2.3.4 Auth modülü kullanıyorum.
Kullanıcıların kimlik doğrulaması açısından, iki aşamalı bir süreç var. Giriş noktası işlevini giriş olduğunu. Bu ilk görev veritabanında saklanan şifre almak ve şifreyi almak ve tuz değerini belirlemektir bulunuyor. Tuz sözde her bir tuzun daha başka bir kısmı duhul $ tuz içinde bir noktaya. $ Şifre karma değerine karşılık gelen değerler dizisi ile belirlenir. Benim durumumda, ben md5 kullanıyorum.
Sorunlar:
Ben bu SALT değeri için yapılveırma bulamıyorum. Bu veritabanında saklanan parola içinde zaten mevcut bir güvenerek gibi görünüyor. Bir veya bu giriş taşınabilir ve tekrarlanabilir olması gerekir çünkü ben bunu AUTH'u yapılveırmanız gerekiyor var mı? Bu hash_password rutin, tuz bulamıyorsa, ben inanmıyorum uniqid kullanarak varsayılan (), tüm taşınabilir.
Kullanıcı ekleme açısından, bu özelliği eklemek için Auth kütüphane değiştirmek için mantıklı mı? yani, o bir MD5 hash yapmak ve sonra md5sum belirli noktalarda yer alan şifreyi tohum tuz tarafından oluşturulan bu md5 kullanmak, diyebilirim benim kendi özelleştirilmiş SALT tanıtmak?
Ben hiçbir güvenlik uzmanı değilim, ama bu overkill? Verilen, önceden belirlenmiş sağlamalarının bir md5 arama kullanarak md5 şifre listesinden erişmek vardı birisi engeller.
Eğer Kohana PHP çerçeve kullanılan varsa, bu sorun için doğru yaklaşım fikir verebilir ki bunu kullveıktan sonra herhangi öğrenilen dersleri veya deneyimleri varsa, bana bildirin. Ben bu konuda çok sayıda forum ve wiki bulunuyor okuyorum, ve gerçek somut bir fikir gördüm ki henüz yoktur. Ben bir iPhone gibi, aslında bu sitede birisi kimlik doğrulaması için bir tekrarlanabilir bir yaklaşım almaya çalışırken, hem PHP kullanarak ve sonunda bir mobil cihazdan ediyorum. Ben de OpenID desteği ve entegrasyonu için bağlanmak sonunda google arkadaşı için destek ekleyerek düşünüyorum.
Aşağıda ilgi fonksiyonlarını ilişkin Kohana yılında Auth modülü gelen parçacıkları vardır. Ben daha iyi oluyor anlamaya çalışıyorum gibi onlar bazı hata ayıklama var.
public function login($username, $password, $remember = FALSE)
{
if (empty($password))
return FALSE;
if (is_string($password))
{
// Get the salt from the stored password
$salt = $this->find_salt($this->driver->password($username));
Kohana::log('debug', "--- Auth_Core login salt = $salt ");
Kohana::log('debug', "--- Auth_Core login pass = $password ");
// Create a hashed password using the salt from the stored password
$password = $this->hash_password($password, $salt);
}
Kohana::log('debug', "--- Auth_Core login pass_hash = $password ");
return $this->driver->login($username, $password, $remember);
}
public function find_salt($password)
{
$salt = '';
foreach ($this->config['salt_pattern'] as $i => $offset)
{
// Find salt characters, take a good long look...
//$salt .= $password[$offset + $i];
$salt .= substr($password, $offset + $i, 0);
}
return $salt;
}
public function hash_password($password, $salt = FALSE)
{
Kohana::log('debug', "--- Auth_Core Original Pass = $password ");
if ($salt === FALSE)
{
// Create a salt seed, same length as the number of offsets in the pattern
$salt = substr($this->hash(uniqid(NULL, TRUE)), 0, count($this->config['salt_pattern']));
Kohana::log('debug', "--- Auth_Core salt created = $salt ");
}
// Password hash that the salt will be inserted into
$hash = $this->hash($salt.$password);
// Change salt to an array
$salt = str_split($salt, 1);
// Returned password
$password = '';
// Used to calculate the length of splits
$last_offset = 0;
foreach ($this->config['salt_pattern'] as $offset)
{
// Split a new part of the hash off
$part = substr($hash, 0, $offset - $last_offset);
// Cut the current part out of the hash
$hash = substr($hash, $offset - $last_offset);
// Add the part to the password, appending the salt character
$password .= $part.array_shift($salt);
// Set the last offset to the current offset
$last_offset = $offset;
}
Kohana::log('debug', "--- Auth_Core hashpw = $password + $hash ");
// Return the password, with the remaining hash appended
return $password.$hash;
}