2012-07-18 33 views
0

關於MySQLi在PHP中準備的語句的超長問題。開始。多個MySQLi準備語句和漏洞(評價我的代碼)

正在使用MySQLi準備完全無法SQl注入的語句嗎?例如,請參閱下面的代碼,我是否認爲我可以在沒有任何注入保護的情況下直接使用$ _POST變量?爲了這個問題的目的,請忽略驗證數據以確保它是我的數據庫的正確格式(我總是這樣做),我更關注安全性。

$mysqli=new mysqli($host, $user, $password, $database); 

$stmt=$mysqli->stmt_init(); 
$stmt->prepare('INSERT INTO `tablename` (`column`) VALUES (?)'); 

$stmt->bind_param('s', $_POST['value']); 
$stmt->execute(); 

$stmt->close(); 
$mysqli->close(); 

另外我的代碼是否正確?這只是第二次或第三次使用MySQLi類編寫準備好的語句。雖然它有效,但我想知道我是否正確地做了一切?該腳本的任何部分可以被認爲是不好的做法?

最後,我將如何去做多個使用相同數據庫連接的預準備語句?我只是在$ stmt上使用close()方法,然後初始化另一個$ stmt類?

謝謝!

回答

1

參數綁定可以防止SQL注入。你不必擔心那部分。它是連接用戶輸入與您不安全的SQL語句。

+0

所以我上面的例子是安全的,因爲它是有約束力的。而像mysqli_query(「INSERT INTO'tablename'('column')VALUES($ _POST ['value']);」)會不安全,因爲它是連接的? – GhostInTheSecureShell 2012-07-18 13:36:43

+0

是的。如果輸入正確轉義,連接也可以是安全的。但作爲設計問題,準備好的語句和參數綁定不需要額外的預防措施。 – 2012-07-18 13:39:55

+0

輝煌,謝謝:)我的代碼的任何建議的話?它看起來是否正確並且構造正確? – GhostInTheSecureShell 2012-07-18 13:45:27