以前我使用通用mysqli
查询在数据库中插入值real_escape_string
以确保安全性,但是每个人似乎都使用预准备语句来提高安全性。为了提高安全性并防止sql注入,我将用准备好的语句替换我的代码,但我想知道下面给出了多少安全准备语句。你能否提出更多改进以提高安全性?
$stmt = mysqli_prepare($DB_connection,"INSERT INTO `posts`(`example`, `example2`) VALUES ('$for_example',?)");
mysqli_stmt_bind_param($stmt, 's', $_POST['username']);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
我使用POST方法从表单中获取值并将它们添加到数据库中。用户可以通过sql注入替换数据库中的值吗? 感谢您提前提供任何帮助。
答案 0 :(得分:0)
从PHP手册:
不需要引用准备语句的参数;该 驱动程序自动处理此如果应用程序专门使用 准备好的语句,开发人员可以肯定没有SQL注入 将发生(但是,如果正在构建查询的其他部分 使用非转义输入,SQL注入仍然可行。)
参考:Prepared statements and stored procedures
您正在使用(可能)非转义输入构建查询。这完全取决于$for_example
是否安全......
因此,我的建议是在准备好的陈述中加入$for_example
作为参数。