我知道 sql 注入(inject)已经在 stackoverflow 上讨论过很多次了。
使用这种方法有什么缺点
foreach($_POST as &$value)
$value = mysql_real_escape_string($value);
只有两行,使用起来似乎很方便,但我认为这不是一个非常常用的方法。
请不要将讨论变成准备好的陈述和 PDO,即使它可能应该被视为最佳实践。
最佳答案
使用此代码的主要缺点是您要修改 POST 数组中的数据。这可能会影响稍后对 POST 数组的操作(例如输出到屏幕)。这也可能导致混淆,如果您正在与其他程序员一起工作,他们可以合理地期望 POST 数组保持不变。由于前面的原因,它也可能使代码维护更加困难。处理代码的任何人都需要知道您修改了 POST 数组。
我的建议是,如果您打算使用 mysql_real_escape_string 而不是参数化查询,请确保将其与 sprintf 和正确的类型说明符结合使用,如下所示:
$query = sprintf("INSERT INTO purchases (amount, num_items, prod_descrip)
VALUES (%f, %d, '%s')",
mysql_real_escape_string($_POST['amount'])
mysql_real_escape_string($_POST['num_items'])
mysql_real_escape_string($_POST['prod_descrip']));
请注意,%f 适用于 float ,%d 适用于整数,%s 适用于字符串值。另请注意,我直接在查询字符串中使用 $_POST 数据,没有进行任何类型的验证,我在实践中不会这样做(只是为了简单起见)。
关于php - 在php中输入卫生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137795/