0

以前,为了安全起见,我使用一般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注入替换数据库中的值吗?
感谢您提前提供任何帮助。

4

1 回答 1

1

来自 PHP 手册:

准备好的语句的参数不需要引用;驱动程序会自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确定不会发生 SQL 注入(但是,如果查询的其他部分是使用非转义输入构建的,则仍然可能发生 SQL 注入)。

参考:预处理语句和存储过程

您正在使用(可能)未转义的输入构建查询。这一切都取决于是否$for_example安全......

因此,我的建议是$for_example在您准备好的语句中包含一个参数。

于 2013-09-29T14:42:24.593 回答