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