2012-12-20 82 views
1

可能重複:
How to prevent SQL injection?PHP SQL注入和保護?

這是我在清理嘗試什麼,我將投入我的數據庫

$pictureID = $_REQUEST['pictureID']; 
$userID = $_REQUEST['userID']; 
$username = $_REQUEST['username']; 

//Sanatize //Protext against injection 

$username = filter_var($username, FILTER_SANITIZE_EMAIL); 
$userID = filter_var($userID, FILTER_SANITIZE_STRING); 
$pictureID = filter_var($pictureID, FILTER_SANITIZE_STRING); 

$username = stripslashes($username); 
$username = mysql_real_escape_string($username); 

$userID = stripslashes($userID); 
$userID = mysql_real_escape_string($userID); 

$pictureID = stripslashes($pictureID); 
$pictureID = mysql_real_escape_string($pictureID); 

我有兩個問題,是上述足夠?

另外,如果我做echo $pictureID什麼都沒有出現,但是,如果我刪除$pictureID = mysql_real_escape_string($pictureID);然後echo $pictureID的作品。

這是正確的行爲嗎?

+7

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

+0

...可能重複?大聲笑...思考也許SO需要一個自動答覆mysql_/PDO的問題? – ficuscr

回答

1

爲了防止SQL注入,唯一需要的調用是這樣的:

$pictureID = mysql_real_escape_string($pictureID); 

此方法調用有效轉義所有特殊字符,這有可能改變的預期操作的查詢。

由於@NullPointer指出,使用PHP's PDO將是一個好的替代品,因爲mysql_ *自PHP5.5+開始已棄用。不過,我不認爲它會很快從PHP中徹底刪除。

+1

mysql_real_escape_string不防止sql攻擊 請參閱:http://stackoverflow.com/questions/9814642/can-mysql-real-escape-string-alone-prevent-all-kinds-of-sql-injection。 如果你通讀你會發現有很多方法愚弄mysql_real_escape_string或mysqli_real_escape_string – BRjava