使用内爆与数组进行安全查询

时间:2011-10-13 15:53:08

标签: php arrays security pdo

我正在使用PDO,而我的$_POST['arraywithdata']是一个带有数字值的数组。我认为这不够安全,我只是不确定并防止自己陷入黑客攻击。

这是我的代码:

$arr = $_POST['arraywithdata'];
$SQL->query("UPDATE `data_s` SET `set` = 1 WHERE `id` IN " . implode(", ", $arr));

如您所见,我不会检查int中的邮政编码或其他内容。

我应该使用类似的东西:

implode(", ", (int) $arr)

我猜上面的内容不起作用,因为数组不能是整数。

3 个答案:

答案 0 :(得分:9)

您需要转换数组的每个值,而不是数组本身。您可以使用array_map执行此操作:

implode(", ", array_map('intval', $arr))

此处array_map会将intval应用于$arr的每个值,并返回一个包含返回值的新数组。

但是当您使用PDO时,您可能也对PDO solution感兴趣。

答案 1 :(得分:0)

将数组传递给您的脚本听起来有点混乱,如果我是你,我会做以下事情:

<input name="test[]" value="arrayitem1" type="text" />
<input name="test[]" value="arrayitem2" type="text" />

然后在PHP中,您可以使用foreach外观循环访问数据并检查is_int或使用array_mapintval,然后使用explode数据。

答案 2 :(得分:0)

最近,我遇到了这个问题 这就是我所做的希望这个帮助

$arr = array(20,40,50);
$query[] = "UPDATE `data_s` SET `set` = 1 WHERE `id` IN (";
$count = count($arr);
foreach($arr as $v)
{
   $query[] = (int)$v;
   if ($count > 1)
    {
      $sql[] =",";
    }
   $count--;
}

$query[] = ")";
$query = implode("\n", $query);

$SQL->query($query);

IT会给你这样的查询 "UPDATE {data_s {1}}集合SET ID为= 1 WHERE;