保护注入变量

时间:2017-08-04 19:35:43

标签: php code-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%我应该使用。

2 个答案:

答案 0 :(得分:2)

严重:

  

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

Aka,使用PDOMySQLi PHP数据库功能Parameterized Queries

以上指向参数化查询的链接对于您的代码显示为替换,您将 NOT 使用mysqli_real_escape_string,或者需要strip_tags除非您个人喜欢您想要存储在数据库中的数据类型。

答案 1 :(得分:0)

忘记你正在做的所有事情,并使用mysqli查看parameterized queries

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

$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()