看了网上大多数sql注入教学文章发现了一个问题很多人都是一来就教' and 1=1 -- -
和' and 1=2 -- -
并没有说明本质,我终究崇尚一句话代码决定天花板
,这亦是如此。当你知道代码怎么写的就会慢慢知道哪里存在注入或者为什么一会是'
一会是"
了。
题目:创建school数据库,student表,字段为:id,name和mail。当用户通过url get传参id值,则输
出id对应的值。否则输出全部值。
0x01 连接mysql
<?php
$host = "localhost";
$user = "root";
$pass = "root";
mysql_connect($host,$user,$pass);
mysql_select_db("school");
?>
0x02 获取url传参以及定义sql语句
<?php
$host = "localhost";
$user = "root";
$pass = "root";
mysql_connect($host,$user,$pass);
mysql_select_db("school");
if(isset($_GET["id"])){
$id = $_GET["id"];
$sql = "select * from student where id = $id";
}else{
$sql = "select * from student";
}
?>
在php中 isset
函数就是判断是否存在, $_GET['id']
就是通过url的get传参。例如 xxx.php?id=1
。
0x03 执行sql语句,并且返回结果
<?php
$host = "localhost";
$user = "root";
$pass = "root";
mysql_connect($host,$user,$pass);
mysql_select_db("school");
if(isset($_GET["id"])){
$id = $_GET["id"];
$sql = "select * from student where id = $id";
}else{
$sql = "select * from student";
}
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo "id:".$row["id"]." "."username:".$row["username"]." "."mail:".$row["mail"]."<br>";
}
?>
这里通过 mysql_query
执行sql语句,返回一个结果集。然后通过 mysql_fetch_arry
函数进行切片。
我们可以理解为获取一个班上的所有人是一个整体,然后切片分成一个一个的人。