我想保护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%我应该使用。
答案 0 :(得分:2)
严重:
停止尝试使用低污染柴油车并改用太阳能车辆。
Aka,使用PDO
或MySQLi
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()
。