保护变量不被注入



我想保护可公开编辑的变量免受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% 应该使用哪个。

认真地说:

停止尝试使用低污染柴油车,改用太阳能车辆。

又名,使用参数化查询PDOMySQLiPHP 数据库功能。

上面指向参数化查询的链接将替代您的代码,如下所示,您不会使用mysqli_real_escape_string或需要strip_tags,除非您个人偏好要存储在数据库中的数据类型。

忘记你正在做的所有事情,并使用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()甚至存在。

最新更新