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類?
謝謝!
所以我上面的例子是安全的,因爲它是有約束力的。而像mysqli_query(「INSERT INTO'tablename'('column')VALUES($ _POST ['value']);」)會不安全,因爲它是連接的? – GhostInTheSecureShell 2012-07-18 13:36:43
是的。如果輸入正確轉義,連接也可以是安全的。但作爲設計問題,準備好的語句和參數綁定不需要額外的預防措施。 – 2012-07-18 13:39:55
輝煌,謝謝:)我的代碼的任何建議的話?它看起來是否正確並且構造正確? – GhostInTheSecureShell 2012-07-18 13:45:27