保护变量不被注入
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 使用 PDO
或 MySQLi
PHP 数据库功能。
以上 link 参数化查询将是您代码的 替换 ,您将 NOT 使用 mysqli_real_escape_string
,或者需要 strip_tags
,除非您个人偏好要在数据库中存储的数据类型。
我想保护可公开编辑的变量免受 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 使用 PDO
或 MySQLi
PHP 数据库功能。
以上 link 参数化查询将是您代码的 替换 ,您将 NOT 使用 mysqli_real_escape_string
,或者需要 strip_tags
,除非您个人偏好要在数据库中存储的数据类型。