gpt4 book ai didi

mysql pdo安全问题

转载 作者:行者123 更新时间:2023-11-30 01:08:01 25 4
gpt4 key购买 nike

从查询字符串中收集数据

$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]".",";

}

当我从查询字符串收集数据时,我必须使用该格式(第二行),如何防止此处的注入(inject)攻击?

最佳答案

如果只有来自 $_GET 的数字,那么这里有一个简单的解决方法,它强制 $cat_id 子集的每个成员类型为整数:

$cat_id = implode(
',',
array_map(
function($v){ return (int)$v; },
explode(',', $cat_id)
);
);

它将 $cat_id 拆分为数组 ['1','2'] ,其中 explode()函数,然后将每个成员转换为整数 array_map()并将数组连接回字符串,并使用逗号 (,) 作为分隔符 implode() 。结果将是:'1,2'

但是,我建议您仔细阅读this question 。如果您使用 pdo,那么您可以尝试使用 FIND_IN_SET()函数而不是带有参数绑定(bind)的 IN 。相关问题:

  1. PDO binding values for MySQL IN statement
  2. PHP PDO: Can I bind an array to an IN() condition?

关于mysql pdo安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com