我在其中設立了發展本地XAMPP服務器,我有一個表像這樣:如何對此代碼執行SQL注入攻擊?
CREATE TABLE `entries`
(
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(100) NOT NULL,
`entry` text NOT NULL,
`date_entered` datetime NOT NULL
)
爲了學習如何保護我的查詢對SQL注入,我想誘使一個(我故意不使用預準備語句)。我有一個查詢插入此表中的條目像這樣:
$sql = 'insert into entries (title , entry , date_entered) '
. 'values("'
. $postTitle
. '","'
. $postEntry
. '","'
. $dateEntered
. '")';
它的工作原理(它插入表中的條目),但我沒能誘導針對它的SQL注入攻擊。以下是我試圖在$postEntry
字段插入:
;drop table entries;
;drop table entries;'
';drop table entries;'
`;drop table entries;'
q';drop table entries;
q","e");drop table entries; --'
q","e");drop table entries;--
對於最後一個值的SQL查詢變成了:
insert into entries (title , entry , date_entered) values("r","q","e");drop table entries;--","2016-08-18 10:35:36")
儘管如此條目表完好!
我修改了SQL字符串使用單引號,像這樣:
$sql = 'insert into entries (title , entry , date_entered) '
. ' values(\''
. $postTitle
. '\',\''
. $postEntry
. '\',\''
. $dateEntered
. '\')';
然後嘗試:
q','2016-5-5');drop table entries; --'
但仍然沒有運氣!我應該如何產生SQL注入攻擊呢? 注意:建議的副本不重複,甚至沒有答案。這個問題的關鍵在於演示expoite,以確保安全措施的正常運行。
嘗試使用子查詢而不是多個逗號分隔。 –
mysqli_multi_query();執行由半(;)分隔的多個查詢冒號 – JYoThI
爲了學習如何保護您的查詢免受SQL注入的影響,您必須學習如何保護您的查詢。而任何注入東西都完全不相關的保護。 –