【发布时间】:2018-01-18 03:15:54
【问题描述】:
我环顾四周寻找答案,但不幸的是,在我的情况下没有任何效果。
编辑:与其他答案不同,因为代码需要故意易受攻击,忽略最佳实践。
我正在网页上开发一项功能,该功能基本上允许用户使用表单查找并查看用户名是否在数据库的表中。如果是,则查询的结果应该被回显或显示给他们。这可能听起来很奇怪,但有问题的网页是为了教授 Web 漏洞,而本练习的重点是让学生也可以使用 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”在数据库中。然后,使用 SQL 注入,他们更改查询以选择该用户名的密码,并显示“用户名 1 密码 1”在数据库中。
我还在学习 PHP,所以请原谅明显的错误。
感谢您的帮助,我们将不胜感激任何帮助或提示!
【问题讨论】:
-
这是你的家庭作业吗?
-
不,我正在为一年级安全学生开发一个项目,但正如我所说,我绝不精通网络开发。
-
好吧,相信你的话,是的,你的代码对你希望他们做的注入是敞开的。更改查询将手动完成,您无需回显查询,只需回显用户名行例如:$query["uName"];查询被更改时的密码。使用
header(location:bla.php?uname=".$_POST["uName"]);将选定的数据发送回登录,然后在登录页面上回显 -
请停止使用 mysqli.. 搜索 PDO 并阅读差异。从一开始就更好地养成好习惯
-
他只是想教 MySQL 注入,所以 sqli 会对此有好处。
标签: php security mysqli sql-injection