mysql pdo安全问题
从查询字符串中收集数据mysql pdo安全问题,mysql,Mysql,从查询字符串中收集数据 $cat_id=$_GET['cat_id']; // Actual $cat_id="'2','3'"; // Sample data format required $sql="select * from table_name where cat_id IN ($cat_id)"; foreach ($dbo->query($sql) as $row) { $str=$str . "$row[subcat]".","; } 当我从查询字符串
$cat_id=$_GET['cat_id']; // Actual
$cat_id="'2','3'"; // Sample data format required
$sql="select * from table_name where cat_id IN ($cat_id)";
foreach ($dbo->query($sql) as $row) {
$str=$str . "$row[subcat]".",";
}
当我从查询字符串收集数据时,我必须使用这种格式(第2行),我如何在这里防止注入攻击 如果只有来自
$\u GET
的数字,那么这里有一个简单的解决方法,强制$cat\u id
子集的每个成员类型为整数:
$cat_id = implode(
',',
array_map(
function($v){ return (int)$v; },
explode(',', $cat_id)
);
);
它将使用函数将$cat_id
拆分为数组['1','2']
,然后使用逗号(,
)作为分隔符将每个成员转换为整数,并将数组连接回字符串。结果将是:'1,2'
不过,我建议大家通读一遍。如果您使用pdo,那么您可以尝试使用函数,而不是在带有参数绑定的中使用。相关问题:
FIND_IN_SET()
的唯一问题是,优化器将扫描整个表以计算每一行,因为它没有意识到存在将表达式转换为可以使用索引解析的内容的可能性。可能的重复