2012-07-18 79 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