在网页

时间:2017-08-10 03:47:39

标签: php security mysqli sql-injection

我已经四处寻找答案,但遗憾的是我的情况没有任何效果。

编辑:与其他答案不同,因为代码需要故意易受攻击,忽略最佳做法。

我正在网页上开发一个功能,它基本上允许用户使用表单查找并查看用户名是否在数据库的表中。如果是,则查询结果应该回显或显示回来。这可能听起来很奇怪,但有问题的网页是教网络漏洞,本练习的重点是让学生使用SQL注入来获取该用户名的密码。

这是PHP ...

<?php
$error=''; //
if(isset($_POST['submit'])){
    if(empty($_POST['user'])){
        $error = "Please enter a username.";
    }
    else
    {
        //Define $user
        $user=$_POST['user'];
        //Establish Connection with server by passing server_name, user_id 
and pass as a parameter
        $sqli = mysqli_connect("localhost", "root", "");
        //Select Database
        $db = mysqli_select_db($sqli, "#");
        $query = mysqli_query($sqli, "SELECT username FROM sqlusers WHERE username 
='$user'");
        $results = mysqli_query($query);
        $rows = mysqli_num_rows($query);
        if($rows == 1){
            echo $query;
        }
        else
            {
            $error = "Username is not in the database";
        }
        mysqli_close($sqli); //Close Conenction
        }
    }
?>

在HTML中我也有..

<?php echo $error; ?>

该功能应如下工作。学生使用表单检查数据库中的Username1。用户名1在数据库中,因此他们会收到一个回复​​说“用户名1”和“用户名1”。在数据库中。然后,使用SQL注入,他们改变查询以选择该用户名的密码,并显示&#39;用户名1密码1&#39;在数据库中。

我还在学习PHP,所以请原谅明显的错误。

感谢您的帮助,非常感谢任何帮助或提示!

1 个答案:

答案 0 :(得分:-1)

请更改下面的查询

$query = mysqli_query($sqli, "SELECT username FROM sqlusers WHERE username 
='".$user."'");

你在PHP中附加了变量的字符串时犯了一个错误。 请尝试上面的代码,它会对你有帮助。