2017-11-04 73 views
0

我有一個問題,mycode的「=」「或使用'=''or'旁路登錄代碼的PHP

$connect= mysqli_connect($host, $user, $password, $database); 

if (isset($_POST["sub"])){ 
    $userr =$_POST["username"]; 
    $passs =$_POST["password"]; 
    $password = hash('sha256', $passs); 
    $query="select * from user WHERE username='$userr'AND password='$password'";  

    $run=mysqli_query($connect,$query); 

         if(mysqli_num_rows($run)) 
    { 
     header("Location: index.php"); 
     $_SESSION['username']=$userr; 
     exit; 
    } 
    else { 
     $pri ='<center><br/> error </center>'; 
    } 
} 
mysqli_close($connect); 

所以當有人做繞過它會去到index.php

我真的不知道如何解決它..

+0

是的,你不應該在你的查詢中直接使用'$ userr'。旁路是調用sql注入,使用準備好的語句或至少逃避你的輸入。 – jh1711

回答

1

只需正確轉義$userr$password變量使用sql語句是這樣的:

$query="select * from user WHERE username='".mysqli_real_escape_string($connect, $userr)."' AND password='". mysqli_real_escape_string($connect, $password)."'"; 

你可以查詢php mysqli sql注入瞭解更多信息。

+0

閱讀手冊http://php.net/manual/en/mysqli.real-escape-string.php,然後你可以相應地調整你的答案。你發佈的內容不起作用。我看不出爲什麼你的答案被接受,但單獨提出。對不起,但這只是事情的簡單事實。 –

+0

謝謝,修復了mysqli_real_escape_string參數。 – edgars