我有一篇關於SQL注入的文章(它是什麼 - 它如何完成以及如何避免)。我知道它是什麼以及它是如何工作的。但我似乎無法在我的數據庫上重現注射。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 '或 'X'= 'X] 查詢變得:: SELECT * FROM TEST_TABLE其中阿達德=' a' 或 'X'= 'X' 一切正常,我也得到返回整個表格的內容。
下一步是嘗試注入第二查詢。我試圖更新test_table。 輸入是:: [a;' update test_table set asda ='123456'where adad ='u] 查詢現在變成:SELECT * FROM test_table WHERE adad ='a;' UPDATE TEST_TABLE SET ASDA = '123456' WHERE阿達德= 'U'
我得到了一個語法錯誤,所以我想盡語法我能想到的,包括 [一個的;」 UPDATE test_table SET asda ='123456'where 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返回結尾處的第二個[']字符來自。
從我明白這是什麼,而在執行第二查詢故障(無論什麼查詢 - 下降,插入,更新)
我是否錯過了什麼?
在此先感謝。
Michael。
[如何防止SQL注入PHP?](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) – 2013-02-27 16:02:07
在你的發佈的例子中,你有一個 - 分號 - 引用:''a'' UPDATE'。它應該是一個引號分號:「a」;更新'。因此,SQL無法區分'SELECT'的結尾和'UPDATE'的開始。 – 2014-06-05 05:06:46