我在大学里为我的安全模块做了一个SQL注入项目,我正在努力学习它是如何工作的.
我可以看到当脚本不过滤输入时它是如何工作的,然后循环遍历DB结果集,在屏幕上显示数据.但据我所知,以下代码不容易受SQL注入,因为它只期望在屏幕上显示一组值:
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("testdb");
$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);
list($id, $name, $description) = mysql_fetch_row($result);
echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";
?>
Run Code Online (Sandbox Code Playgroud)
如果我将id的值设置为:
1 OR 1 = 1 UNION SELECT id, username, password FROM users LIMIT 1, 1 --
Run Code Online (Sandbox Code Playgroud)
除非我运行两次mysql_fetch_row($ result)语句,否则不会显示查询的UNION部分中的值,如下所示:
<?php
$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);
list($id, $name, $description) = mysql_fetch_row($result);
echo "ID: …Run Code Online (Sandbox Code Playgroud)