繁体   English   中英

基本HTTP验证

[英]Basic HTTP Authentication

我在使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的值设置两次,

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

您是不是要这样做?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM