我很困惑,或者說我很喜歡,sooooooooo與pdo準備的陳述混淆。我知道準備好的聲明是保護數據免受黑客攻擊的最佳方式。PDO準備語句如何幫助防止SQL易受攻擊的語句?
來源:How can prepared statements protect from SQL injection attacks?
我們發送程序到服務器第一
$ DB->準備( 「SELECT * FROM用戶其中id =?」);其中數據是 ,被一個名爲「佔位符」的變量替代。
請注意,非常相同的查詢被髮送到服務器,沒有任何 數據!然後我們發送的第二請求中的數據, 完全從查詢本身分開:
$ DB->執行($的數據);
查詢 -
$query=$db->prepare("SELECT * FROM USERS WHERE username=?");
$query->execute(array($tex));
$tex=blah; DROP TABLE users;--
那麼這將是象 - SELECT * FROM USERS其中username =等等; DROP TABLE用戶; -
如何準備語句將幫助我與上面的這個例子?
如果這個問題含糊不清,我真的很抱歉。任何幫助,將不勝感激。提前致謝。
你在說,在使用佔位符時,不可能生成易受攻擊的sql。但我想知道的是佔位符如何做那件事?我的意思是 - htmlspecialchars()函數將一些預定義的字符(&,「,',<,>)轉換爲HTML實體,addslashes()函數返回一個帶有預定義字符前面的反斜槓的字符串,就像這些函數一樣,佔位符檢測值是不是 –
**停止**。它沒有這樣的事情,佔位符確保值*是作爲有效的SQL值提供的*,它與HTML或實體沒有任何關係或斜線*佔位符*僅*確保數據正確傳輸*沒有* SQL注入機會*佔位符永遠不會改變實際值*在上面的例子中,我已經展示瞭如何在SQL查詢中使用適當的ANSI)SQL語法 – user2864740
(假設佔位符構建實際的SQL查詢,「方法」將與'mysqli_real_escape_string'或同等方式構成)。 – user2864740