【发布时间】:2023-03-28 21:25:01
【问题描述】:
function addAds($n) {
for ($i=0;$i<=$n;$i++) {
while($row=mysql_fetch_array(mysql_query("SELECT * FROM users"))) {
$aut[]=$row['name'];
}
$author=$aut[rand(0,mysql_num_rows(mysql_query("SELECT * FROM users")))];
$name="pavadinimas".rand(0,3600);
$rnd=rand(0,1);
if($rnd==0) {
$type="siulo";
} else {
$type="iesko";
}
$text="tekstas".md5("tekstas".rand(0,8000));
$time=time()-rand(3600,86400);
$catid=rand(1,9);
switch ($catid) {
case 1:
$subid=rand(1,8);
break;
case 2:
$subid=rand(9,16);
break;
case 3:
$subid=rand(17,24);
break;
case 4:
$subid=rand(25,32);
break;
case 5:
$subid=rand(33,41);
break;
case 6:
$subid=rand(42,49);
break;
case 7:
$subid=rand(50,56);
break;
case 8:
$subid=rand(57,64);
break;
case 9:
$subid=rand(65,70);
break;
}
mysql_query("INSERT INTO advert(author,name,type,text,time,catid,subid) VALUES('$author','$name','$type','$text','$time','$catid','$subid')") or die(mysql_error());
}
echo "$n adverts successfully added.";
}
这个函数的问题是它永远不会加载。正如我所注意到的,我的 while 循环导致了它。如果我评论它,一切都很好。它必须从我的数据库中获取随机用户并将其设置为变量 $author。
【问题讨论】:
-
你有一个 SQL 注入漏洞。
-
@SLacks,不,他们没有。所有值都从数据库中提取或在函数中生成。唯一看起来有问题的可能是 users 表,但这仍然是一个延伸。
-
@Brendan Long - 仅仅因为值来自数据库并不意味着它是干净的。在问题的范围内,如何阻止
users中的一行出现name的','','','','','','');insert into table sql_injection_attacks values (TIME());? -
它是否可能并不重要,每个人都应该一直安全地做数据库工作,而不是花一秒钟的时间思考“等等,会不会这很危险? "
-
@Richard JP Le Guen - 但现在你只是在假设。有多少人在他们的用户名中允许使用这样的标点符号?这当然是可能的,但仅凭这个函数你不能只说“存在 SQL 注入漏洞”。
标签: php infinite-loop