2017-11-04 61 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