基本HTTP身份验证

问题描述:

我在使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

我要跳过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

我做了这些更改,但我的问题依然存在。 –

我认为这可能是一个问题,因为你只需设置的$值传递的两倍,

$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