2012-10-29 346 views
1

我在使HTTP授權正常工作時遇到一些困難。出於某種原因,我所得到的是彈出框,詢問用戶名和密碼。這是我正在使用的代碼。有人能告訴我我要去哪裏嗎?基本HTTP身份驗證

if ( !isset( $_SERVER['PHP_AUTH_USER'] ) || !isset( $_SERVER['PHP_AUTH_PW'] )) 
{ 
    authorizeUser(); 
    //if no result, there is no user 
} 
else 
{ 
    $user = htmlentities(trim($_SERVER['PHP_AUTH_USER'])); 
    $pass = htmlentities(trim($_SERVER['PHP_AUTH_PW'])); 
    $pass = md5($_SERVER['PHP_AUTH_PW']); 

    //connect to MySQL data here// 


    $sql = "SELECT user_name,pwd FROM tableName WHERE user_name='$user' AND pwd='$pass'"; 
    $result = mysql_query($sql); 
    if(mysql_num_rows($result) == 0) 
    { 
     authorizeUser(); 
    } 
    else 
    { 
     header("Location: somepage"); 
    } 
} 

function authorizeUser() 
{ 
    header('WWW-Authenticate: Basic realm="Restricted Area"'); 
    header('HTTP/1.0 401 Unauthorized'); 
      echo "text if cancel button used"; 
}//end authorizedUser 
+0

查詢工作正常嗎? – janenz00

+0

當我直接從phpmyadmin運行查詢時,它工作正常。儘管如此,我還是無法從腳本中看出來。 –

+0

print $ sql輸出是什麼? – janenz00

回答

0

我要跳過SQL注入演講了,但請不要在查詢之前的密碼或用戶用戶htmlentities()。它用於將字符串顯示回瀏覽器或傳遞給url,而不是將轉義的數據與SQL結果進行比較或插入到數據庫中。如果用戶名或密碼可能有一個特殊的html字符編碼,那麼在使用之前,您需要使用html_entity_decode()進行解碼。

返回注射保護...爲了防止注射,而不通過mysqli或pdo移動到預處理語句,請使用mysql_real_escape_string()代替htmlentities();

$user = mysql_real_escape_string(html_entity_decode (trim($_SERVER['PHP_AUTH_USER']))); 
$pass = mysql_real_escape_string(html_entity_decode (trim($_SERVER['PHP_AUTH_PW']))); 
$pass = md5($pass); 
+0

我做了這些更改,但我的問題依然存在。 –

0

我認爲這可能是一個問題,因爲你只需設置的$值傳遞的兩倍,

$pass = htmlentities(trim($_SERVER['PHP_AUTH_PW'])); 
$pass = md5($_SERVER['PHP_AUTH_PW']); 

您是不是要做到這一點呢?

$pass = htmlentities(trim($_SERVER['PHP_AUTH_PW'])); 
$pass = md5($pass); 
+0

我正在替換值,如果你仔細觀察,我正在使用htmlentities和trim函數將$ _SERVER ['PHP_AUTH_PW']的值賦值給$ pass。第二行用前面$ pass的md5替換該值。 OOOOOhhhh廢話,我現在看到它......這麼簡單,它只是逃避我! –

+0

這仍然沒有解決整個問題,但 –

+0

這也可能是一個問題, 'SELECT USER_NAME,PWD FROM表名其中用戶名= '$用戶' 和pwd = '$傳遞'「' 嘗試, 'SELECT USER_NAME, pwd FROM tableName WHERE user_name ='「。$ user。」'AND pwd ='「。$ pass。」'「' – Meiyoki