我有一篇关于 SQL 注入的文章(它是什么 - 它是如何完成的以及如何避免它)。我知道它是什么以及它是如何工作的。但我似乎无法在我的数据库上重现注入。
我使用 mysql 工作台制作了一个非常简单的数据库,用于视频俱乐部。电影 - 股票 - 价格 - 客户购物车等。我还制作了一个非常简单的 html 页面,我可以从中添加电影 - 查看我的库存等。
所以我有一个 txt 字段,我可以在其中输入电影名称,然后我会返回该特定电影的一些信息。
获取我输入的名称并进行查询的代码是::
$name = $_POST ['txtfld'];
$sql = ("SELECT * FROM test_table WHERE adad = '$Mname'");
if ($result = mysqli_query($dbc,$sql))
现在,当我将“a”作为输入时,一切都按预期工作。我取回了一个 pk 等于 [a] 的条目。查询变为 :: SELECT * FROM test_table WHERE adad='a'。
下一步是看看我是否可以从中获取整个表或一些随机条目。输入是:[ a' OR 'x'='x ] 查询变为 :: SELECT * FROM test_table where adad = ' a' OR 'x' = 'x ' 一切都按预期工作,我取回了整个表的内容。
下一步是尝试注入第二个查询。我试图更新 test_table。输入是 :: [ a;' update test_table set asda = '123456' where adad = 'u ] 查询现在变成 :: SELECT * FROM test_table WHERE adad= ' a;' 更新 test_table SET asda ='123456' WHERE adad = 'u '
我遇到了一个语法错误,所以我尝试了所有我能想到的语法,包括 [ a;' 更新 test_table SET asda = '123456' 其中 adad = 'u';# ] 。他们都没有工作。
问题是,我真的不明白为什么会出现语法错误。
对于上面给出的输入,mysqli_error 返回此消息
error: You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'update test_table set asda =
'123456' where adad = 'u'' at line 1
而我插入的回声返回这个
SELECT * FROM test_table WHERE adad = 'a;' UPDATE test_table SET asda = '123456' WHERE
adad = 'u'
我在回显返回中没有看到任何语法错误,并且我不知道 mysqli_error 返回末尾的第二个 [ ' ] 字符来自何处。
据我了解,这是执行第二个查询的失败(无论查询是什么 - 删除、插入、更新)
我想念什么吗?
提前致谢。
迈克尔。