我有一個本地服務器,它連接到我的在線數據庫。我一直在使用bitAuth作爲我的身份驗證方法,並且它工作得非常好,直到我將所有文件移動到我的服務器上。BitAuth Live服務器錯誤
BitAuth附帶默認管理員帳戶admin(pw admin)。我嘗試使用此登錄,但它返回「無效的用戶名/密碼」。
我看到別人提到過類似的問題here,但是沒有任何解決辦法。
我有一個本地服務器,它連接到我的在線數據庫。我一直在使用bitAuth作爲我的身份驗證方法,並且它工作得非常好,直到我將所有文件移動到我的服務器上。BitAuth Live服務器錯誤
BitAuth附帶默認管理員帳戶admin(pw admin)。我嘗試使用此登錄,但它返回「無效的用戶名/密碼」。
我看到別人提到過類似的問題here,但是沒有任何解決辦法。
解決它自己:
我第一次被曝由BitAuth使用的密碼驗證過程。
這將使你這段代碼:
function CheckPassword($password, $stored_hash)
{
$hash = $this->crypt_private($password, $stored_hash);
if ($hash[0] == '*')
$hash = crypt($password, $stored_hash);
return $hash == $stored_hash;
}
如果你要打印$哈希值和$ stored_hash,你會認識到2個哈希值是不同的(如預期,因爲如果。它是相同的,那麼登錄會通過)
在這一點上,唯一可能的原因是crypt_private()函數產生了一個不同於存儲的散列的散列。然後我查看了crypt_private()函數:
function crypt_private($password, $setting)
{
$output = '*0';
if (substr($setting, 0, 2) == $output)
$output = '*1';
$id = substr($setting, 0, 3);
# We use "$P$", phpBB3 uses "$H$" for the same thing
if ($id != '$P$' && $id != '$H$')
return $output;
$count_log2 = strpos($this->itoa64, $setting[3]);
if ($count_log2 < 7 || $count_log2 > 30)
return $output;
$count = 1 << $count_log2;
$salt = substr($setting, 4, 8);
if (strlen($salt) != 8)
return $output;
# We're kind of forced to use MD5 here since it's the only
# cryptographic primitive available in all versions of PHP
# currently in use. To implement our own low-level crypto
# in PHP would result in much worse performance and
# consequently in lower iteration counts and hashes that are
# quicker to crack (by non-PHP code).
if (PHP_VERSION >= '5') {
$hash = md5($salt . $password, TRUE);
do {
$hash = md5($hash . $password, TRUE);
} while (--$count);
} else {
$hash = pack('H*', md5($salt . $password));
do {
$hash = pack('H*', md5($hash . $password));
} while (--$count);
}
$output = substr($setting, 0, 12);
$output .= $this->encode64($hash, 16);
return $output;
}
沒有什麼似乎不合適。然後,我發現PHP可能在不同版本中產生了不同的哈希值。然後我聯繫了我的服務器支持,發現服務器使用的是PHP5.2,而我的服務器使用的是PHP5.4。
的solution很簡單,我添加以下行CI中我的.htaccess文件,
AddHandler的應用程序/ x-的httpd-php53 .PHP
這在我的服務器,將啓用PHP5.3而不是PHP5.2。這已經使得crypt_private()函數從所提供的密碼字符串和所存儲的散列產生相同的散列。
此問題的另一個解決方案是,基本上只需創建一個新帳戶,進入您的數據庫並「激活」帳戶。由於這個新的散列是由您的服務器使用的任何版本的PHP生成的,因此它解決了這個問題。
我希望我提供的2個解決方案能夠幫助那些面臨同樣問題的其他BitAuth用戶。
BitAuth是一個很好的身份驗證庫,只要他們將它放到他們的文檔中,以使用戶意識到這個潛在的錯誤。
美好的一天。
確保用戶屬於某些羣組..最近我在這方面遇到困難.. – Red
是用戶確實屬於組「admin」:/ –
刪除用戶認證..然後編輯用戶密碼。 。還要確保pswd是正確的,正如doc說的那樣。 – Red