2

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
4

2 に答える 2

0

$ passの値を2回設定するだけなので、これが問題になる可能性があると思います。

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

代わりにこれを行うつもりでしたか?

$pass = htmlentities( trim( $_SERVER['PHP_AUTH_PW'] ) );
$pass = md5( $pass );
于 2012-10-29T14:25:54.750 に答える
0

今のところ、SQL インジェクションのスピーチはスキップしますがhtmlentities()、クエリの前にパスワードやユーザーを使用しないでください。SQL の結果と比較したり、DB に挿入したりするデータをエスケープするためではなく、文字列をブラウザに表示したり、URL に渡したりするためのものです。ユーザー名またはパスワードに特殊な 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 );
于 2012-10-29T14:24:08.777 に答える