2017-08-05 69 views
1

檢查用戶是否在表單字段中輸入惡意代碼的最佳方法是什麼?我看了其他問題,但這些只是檢查是否輸入了什麼內容,以及是否他們想要的內容(電話號碼中的電話號碼)。我正在尋找SQL注入的保護。在php中防止SQL注入

+0

清理輸入時的處理,剝離標籤,使用PDO等。 –

+0

您的問題太寬泛。你必須確切地確定問題,並考慮你有什麼努力去做。您可以[檢查此](https://stackoverflow.com/help/how-to-ask)尋求幫助。 – SaidbakR

+0

我確實說過我需要一些東西來防止MySQL注入。你能指出我可以更具體的嗎? –

回答

3

Prepared statements是爲了防止SQL注入,當我們談論SQL注入時它們就足夠了。但是,還有一些其他的攻擊也應該阻止。 XSSCSRF等。

SQL注入:

預處理語句的基本工作原理是這樣的:

  1. 準備:一個SQL語句的模板創建和發送到數據庫。某些值未指定,稱爲參數(標記爲「?」)。示例:INSERT INTO MyGuests VALUES(?,?,?)
  2. 數據庫解析,編譯並對SQL語句模板執行查詢優化,並存儲結果而不執行它
  3. 執行:稍後,應用程序將這些值綁定到參數,並且數據庫執行該語句。因爲它與不同價值觀
  4. 想要的應用程序可以執行該語句多次

樣品:

// Prepare the statement. 
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); 

// Bind parameters. 
$stmt->bind_param("sss", $firstname, $lastname, $email); 

// Set parameters. 
$firstname = "John"; 
$lastname = "Doe"; 
$email = "[email protected]"; 

// Execute the statement. 
$stmt->execute(); 

// Close the statement. 
$stmt->close(); 

// Close the connection. 
$conn->close(); 

來源:w3schools.com

+0

所以我想在任何地方使用我接受用戶輸入? –

+0

是的,只要你將用戶的輸入插入數據庫。 – Spectarion

+0

好的。我是否也應該在登錄時使用它,因爲我在Google上搜索一些內容,並且看到用戶可以在用戶名字段中這樣做。 '約翰'或1 = 1; - ' –

0

使用htmlspecialcharshtmlentities到HTML特殊字符,如果爲HTML實體。您打算存儲或輸出用戶輸入字符串。這將有助於避免HTML注入。

Spectarion的答案是SQL注入的一個很好的解決方案。