2013-04-27 55 views
0

兩個相關的問題應該很簡單,儘管我的搜索已經空了。PHP提交的分號碼

1)我有一個來自PHP的。如果一個字段中包含分號,並且在操作頁面中執行$ _POST轉儲,則字段值將在分號處截斷。我猜這與SQL注入安全有關?但需要允許合法的分號。有沒有一個設置可以讓它通過?或者我需要逃避它,如果是的話,怎麼樣? 2)爲了捕獲實際的SQL注入,我不需要在一個查詢中允許多個語句...就像「SELECT * FROM table; DROP table」。有沒有一種設置可以禁用此功能,無論是PHP還是MySQL,但不停止合法分號?

謝謝。

+1

我從來沒有聽說過分號是一個問題。你能舉一個你正在輸入的例子嗎? – 2013-04-27 02:59:32

+0

另外,您不需要檢測SQL注入,您需要使所有輸入都是良性的。 – 2013-04-27 03:00:23

+0

我還沒有針對問題1的答案,但對於2,您可以做的是使用準備好的語句。 – 2013-04-27 03:00:31

回答

1

分號不會引起任何問題。

使用準備好的語句。

mysqli

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); 
$stmt->bind_param('s', $name); 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

PDO

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); 

$stmt->execute(array(':name' => $name)); 

foreach ($stmt as $row) { 
    // do something with $row 
} 

使用mysql_real_escape_string

$unsafe_variable = $_POST["user-input"]; 
$safe_variable = mysql_real_escape_string($unsafe_variable); 

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')"); 

檢查這個問題,以瞭解更多信息How can I prevent SQL injection in PHP?

0

好吧,傻我。是的,我正在使用準備好的語句,轉義等等。但我還想在輸入之前對輸入進行清理。所以我有一個全局函數來檢查所有參數,除去撇號和分號後的所有內容。對GET值工作正常,但我忘記了我需要更新以不同的方式處理POST參數,並忘記了這是在那裏,因爲直到現在我還沒有輸入分號。 :)但謝謝你的迴應。