保护变量不被注入

Protect variables from injection

我想保护可公开编辑的变量免受 SQL 注入。

下面是一个代码示例,显示收集的要更新的表单变量。第一个想法是保护如下变量;

$val1 = $val2 = strtoupper;
$val1 = $val2 = strip_tags;
$val1 = $val2 = trim;
$val1 = $val2 = mysqli_real_escape_string;

下一个想法是保护数据库查询,如下所示;

$update_customer = "update customer set val_1='$val1',val_2='$val2' where foo='$foo'"; //update values set

$update_cust = strtoupper($update_customer);
$update_cust = strip_tags($update_customer);
$update_cust = trim($update_customer);
$update_cust = mysqli_real_escape_string($con, $update_customer);
$update_cust = mysqli_query($con, $update_customer); //inititate query

我认为没有必要同时使用这两个想法,但我不是 100% 应该使用哪个。

忘掉所有你正在做的事情,看看 parameterized queries 使用 mysqli。

您需要对上面的代码执行如下操作:

$stmt = mysqli_prepare($con, "UPDATE customer SET val_1=?,val_2=? WHERE foo=?");

mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3);
mysqli_stmt_execute($stmt);

您现在需要执行 trim()strip_tags()strtoupper() 的唯一原因纯粹是出于个人喜好,您甚至可以忘记 mysqli_real_escape_string() 的存在。

说真的:

Stop trying to use low-pollution diesel cars and switch to solar powered vehices.

又名,使用 Parameterized Queries 使用 PDOMySQLi PHP 数据库功能。

以上 link 参数化查询将是您代码的 替换 ,您将 NOT 使用 mysqli_real_escape_string,或者需要 strip_tags,除非您个人偏好要在数据库中存储的数据类型。