基本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
我要跳过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);
我做了这些更改,但我的问题依然存在。 –
我认为这可能是一个问题,因为你只需设置的$值传递的两倍,
$pass = htmlentities(trim($_SERVER['PHP_AUTH_PW']));
$pass = md5($_SERVER['PHP_AUTH_PW']);
您是不是要做到这一点呢?
$pass = htmlentities(trim($_SERVER['PHP_AUTH_PW']));
$pass = md5($pass);
我正在替换值,如果你仔细观察,我正在使用htmlentities和trim函数将$ _SERVER ['PHP_AUTH_PW']的值赋值给$ pass。第二行用前面$ pass的md5替换该值。 OOOOOhhhh废话,我现在看到它......这么简单,它只是逃避我! –
这仍然没有解决整个问题,但 –
这也可能是一个问题, 'SELECT USER_NAME,PWD FROM表名其中用户名= '$用户' 和pwd = '$传递'“' 尝试, 'SELECT USER_NAME, pwd FROM tableName WHERE user_name ='“。$ user。”'AND pwd ='“。$ pass。”'“' – Meiyoki
查询工作正常吗? – janenz00
当我直接从phpmyadmin运行查询时,它工作正常。尽管如此,我还是无法从脚本中看出来。 –
print $ sql输出是什么? – janenz00