[제로보드] 관리자 메일 발송에서 SQL 인젝션 발생 보안 버그 (2007.05.23)
로빈아빠
본문
관리자 메일 발송 코드에서 $s_que 변수를 이용한 SQL Injection을 일으킬 수 있는 코드가 발견되어 패치합니다.
첨부된 admin_sendmail_ok.zip 파일의 압축을 풀면 나오는 admin_sendmail_ok.php파일을 사용하시는 제로보드4의 디렉토리에 덮어쓰시면 됩니다.
수정된 부분은 다음과 같습니다.
= admin_sendmail_ok.php ===============================================================
@@ -28,16 +28,18 @@
if(!$true) $true = 0;
if(!$nomailing) $nomailing = 0;
if(!$sendnum) $sendnum = 100;
+ $group_no = (int)$group_no;
+ $s_que = '';
if(!$total_member_num) {
$temp=mysql_fetch_array(mysql_query("select count(*) from $member_table where group_no='$group_no'",$connect));
$total_member_num=$temp[0];
}
if(!$true) $true = 0;
if(!$nomailing) $nomailing = 0;
if(!$sendnum) $sendnum = 100;
+ $group_no = (int)$group_no;
+ $s_que = '';
if(!$total_member_num) {
$temp=mysql_fetch_array(mysql_query("select count(*) from $member_table where group_no='$group_no'",$connect));
$total_member_num=$temp[0];
}
if($cart) {
- $temp=explode("||",$cart);
- $s_que=" and ( no='$temp[1]' ";
- for($i=2;$i<count($temp);$i++) $s_que.=" or no='$temp[$i]' ";
- $s_que.=" )";
+ $temp = explode("||",$cart);
+ for($i=0;$i<count($temp);$i++) $target_srls[] = (int)$temp[$i];
+ $s_que = sprintf(' and ( no in (%s) )', "'".implode("','", $target_srls)."'");
} else {
- $temp=explode("||",$cart);
- $s_que=" and ( no='$temp[1]' ";
- for($i=2;$i<count($temp);$i++) $s_que.=" or no='$temp[$i]' ";
- $s_que.=" )";
+ $temp = explode("||",$cart);
+ for($i=0;$i<count($temp);$i++) $target_srls[] = (int)$temp[$i];
+ $s_que = sprintf(' and ( no in (%s) )', "'".implode("','", $target_srls)."'");
} else {
===============================================================================
관련링크
댓글목록
등록된 댓글이 없습니다.