为什么要使用&x27;密码验证';PHP没有';不行?

为什么要使用&x27;密码验证';PHP没有';不行?,php,forms,authentication,hash,ws,Php,Forms,Authentication,Hash,Ws,我有一个ws,在这里我创建了一个用户名和pw的用户,我使用 password_hash($password, PASSWORD_DEFAULT); 对密码进行哈希运算 Ws-create用户: <?php header('Content-Type: text/xml'); $username = $_REQUEST["username"] ?? ""; $password = $_REQUEST[

我有一个ws,在这里我创建了一个用户名和pw的用户,我使用

password_hash($password, PASSWORD_DEFAULT); 
对密码进行哈希运算

Ws-create用户:

<?php
    header('Content-Type: text/xml');
    
        $username = $_REQUEST["username"] ?? "";
        $password = $_REQUEST["psw"] ?? "";

        $codice_risposta = 0;
        $messaggio = "";
        $sql = "";
        $hashedPassword = password_hash($password, PASSWORD_DEFAULT); 
        
        $conn = mysqli_connect("localhost:2020","root","","pasinisilvia_elaboratogasitalia");
        //password_verify($userPassword, $hashedPassword)
        
        if ($username != '' && $hashedPassword!='' ){
            if ($conn) {  // connessione OK
                
                $sql = "INSERT INTO proprietario (NomeUtente,Password) 
                        VALUES ( '$username','$hashedPassword' ) ";

                $result = mysqli_query($conn,$sql);
                
                if ($result) {  // query OK
                    $codice_risposta = 1;
                    $messaggio = "Utente creato";
                } 
                else {
                    $messaggio = "Username già in uso";
                }
            }
        }else {
            $messaggio = "Parametri mancanti";
        }           
    
        $doc=new DOMDocument('1.0', 'UTF-8');       
    
        $elRisposta=$doc->createElement("risposta");                                                //echo "<risposta>\n";
        $elCodRisp =$doc->createElement("codice_risposta");                                         //echo "    <codice_risposta>$codRisp</codice_risposta>\n";
        $elCodRisp->appendChild($doc->createTextNode("$codice_risposta"));
        $elMex=$doc->createElement("messaggio");                                                    //echo "    <messaggio>$msg</messaggio>\n";
        $elMex->appendChild($doc->createTextNode("$messaggio"));
            
        // appendo a risposta
        $elRisposta->appendChild($elCodRisp);
        $elRisposta->appendChild($elMex);
        
        $doc->appendChild($elRisposta);
        echo $doc->saveXML();
?>
createElement(“risposta”)//回音“\n”;
$elCodRisp=$doc->createElement(“codice_risposta”)//回显“$codRisp\n”;
$elCodRisp->appendChild($doc->createTextNode($codice_risposta));
$elMex=$doc->createElement(“消息”)//回显“$msg\n”;
$elMex->appendChild($doc->createTextNode($messaggio));
//附录a
$elRisposta->appendChild($elCodRisp);
$elRisposta->appendChild($elMex);
$doc->appendChild($elRisposta);
echo$doc->saveXML();
?>
Ws-log登录:

<?php   header('Content-Type: text/xml');
        
        $username = $_REQUEST["username"] ?? "";
        $psw = trim($_REQUEST["psw"]) ?? "";
        //var_dump($psw);
        //$hashedPassword = password_hash($psw, PASSWORD_DEFAULT);
        $conn = mysqli_connect("localhost:2020","root","","pasinisilvia_elaboratogasitalia");
        
        if (  $username!='' &&  $psw!='' ) {
            if ($conn) {   // se la connessione è avvenuta correttamente
              $sql = "SELECT Password FROM proprietario WHERE NomeUtente='$username'";
                
              $result = mysqli_query($conn,$sql);
              if ( $result ) {  // se non ci stati errori di sintassi
                if ( mysqli_num_rows($result) == 1 ) {  //se c'è l'utente
                  $row = mysqli_fetch_assoc($result);
                  $hashedPassword = $row['Password'];
                    //var_dump($psw);
                 //  var_dump($hashedPassword);
                // $hashedPassword = password_hash($psw, PASSWORD_DEFAULT); 
                 if(password_verify($psw, $hashedPassword)){
                  //if($hashedPassword == $pwDb){
                      $cod_risp = 1;
                      $messaggio = "Successo";
                  }
                  else{
                      $cod_risp = 0;
                      $messaggio = "pw sbagliata";
                  }
                }
            }
        
             /* $sql = "SELECT * FROM proprietario WHERE NomeUtente=? and Password=? " ;
                
              $stmt = $conn->prepare($sql);
              $stmt->bind_param('ss', $username, $hashedPassword); // 's' specifies the variable type => 'string'

              $stmt->execute();
              
              $stmt->bind_result($username, $password);
              $stmt->store_result();

              $result = $stmt->get_result();*/
             // $result = mysqli_query($conn,$sql);
             // $result = mysqli_query($conn,$sql);
              
             /* if ( $result ) {  // se non ci stati errori di sintassi
                if ( mysqli_num_rows($result) == 1 ) {  //se c'è l'utente
                 // $row = mysqli_fetch_assoc($result);
                  $nome = $row['NomeUtente'];
                  $pw = $row['Password'];
                  
                  $cod_risp = 1;
                  $messaggio = "Successo";
                }
                else {  //se non c'è l'utente
                  $cod_risp = 0;
                  $messaggio="Username o password errati";
                }
              }
              else {
                $cod_risp = 0;
                $messaggio="Errore nella query";    
              }
            }
            else  {
               $cod_risp = 0;
               $messaggio="Impossibile connettersi al database"; 
            }*/
        }
        else {
          $cod_risp = 0;
          $messaggio = "Parametri mancanti nella richiesta";
        }
        }
        
        /*if($cod_risp == 1)
            echo "1";
        else
            echo "0";*/
        
        /*echo "<risposta>\n";
        echo "    <codice_risposta>$cod_risp</codice_risposta>\n";
        echo "    <messaggio>$messaggio</messaggio>\n";
        if ($cod_risp==1) {
            echo "    <dettagli>\n";
            echo "        <nome>$nome</nome>\n";
            echo "        <cognome>$pw</cognome>\n";
            echo "    </dettagli>";
        }
        echo "</risposta>";  */ 
        
        /*echo "<risposta>\n";
        echo "    <codice_risposta>$cod_risp</codice_risposta>";
        echo "    <messaggio>$messaggio</messaggio>";
        echo "</risposta>"; */
        
        $doc=new DOMDocument('1.0', 'UTF-8');
        
        $elRisposta=$doc->createElement("risposta");                                                //echo "<risposta>\n";
        $elCodRisp =$doc->createElement("codice_risposta");                                         //echo "    <codice_risposta>$codRisp</codice_risposta>\n";
        $elCodRisp->appendChild($doc->createTextNode("$cod_risp"));
        $elMex=$doc->createElement("messaggio");                                                    //echo "    <messaggio>$msg</messaggio>\n";
        $elMex->appendChild($doc->createTextNode("$messaggio"));
            
        // appendo a risposta
        $elRisposta->appendChild($elCodRisp);
        $elRisposta->appendChild($elMex);
        
        $doc->appendChild($elRisposta);
        echo $doc->saveXML();
?>
prepare($sql);
$stmt->bind_param('ss',$username,$hashedPassword);/'s'指定变量类型=>'string'
$stmt->execute();
$stmt->bind_结果($username,$password);
$stmt->store_result();
$result=$stmt->get_result()*/
//$result=mysqli\u查询($conn,$sql);
//$result=mysqli\u查询($conn,$sql);
/*如果($result){//se sintassi非ci统计错误
如果(mysqli_num_rows($result)==1){//se c'èl'utete
//$row=mysqli\u fetch\u assoc($result);
$nome=$row['nomeutete'];
$pw=$row['Password'];
$cod_risp=1;
$messaggio=“Successo”;
}
否则{//se non c'èl'utene
$cod_risp=0;
$messaggio=“用户名和密码勘误表”;
}
}
否则{
$cod_risp=0;
$messaggio=“Errore nella query”;
}
}
否则{
$cod_risp=0;
$messaggio=“不可能的连接数据库”;
}*/
}
否则{
$cod_risp=0;
$messaggio=“Parametri mancanti nella richiesta”;
}
}
/*如果($cod_risp==1)
回声“1”;
其他的
回声“0”*/
/*回音“\n”;
回显“$cod_risp\n”;
回显“$messaggio\n”;
如果($cod_risp==1){
回音“\n”;
回显“$nome\n”;
回显“$pw\n”;
回声“;
}
回声“;*/
/*回音“\n”;
echo“$cod_risp”;
回声“$messaggio”;
回声“*/
$doc=新的DOMDocument('1.0','UTF-8');
$elRisposta=$doc->createElement(“risposta”)//回音“\n”;
$elCodRisp=$doc->createElement(“codice_risposta”)//回显“$codRisp\n”;
$elCodRisp->appendChild($doc->createTextNode($cod_risp));
$elMex=$doc->createElement(“消息”)//回显“$msg\n”;
$elMex->appendChild($doc->createTextNode($messaggio));
//附录a
$elRisposta->appendChild($elCodRisp);
$elRisposta->appendChild($elMex);
$doc->appendChild($elRisposta);
echo$doc->saveXML();
?>
每次我尝试登录时,函数password\u verify返回false。
谢谢您的关注。

请尝试做一些。转储您正在处理的值,以尝试查看哪一个值可能包含您不期望的内容。@El_Vanja我已经这样做了。SQL中的hashedPassword是正确的,Url中的密码是我在登录页面中插入的密码。现在,如果取消注释,验证是否在创建页面上起作用?数据库中的
password
-列的大小是多少?顺便说一句,你完全可以接受SQL注入攻击。与绑定参数一起使用,而不是像那样在查询中直接使用用户数据。旁注:使用
$password!=''
而不是
$hashedPassword!=''。即使密码是空字符串,您也会从
password\u hash()
得到一个哈希值,因此
$hashedPassword
永远不会为空。