그누보드 영카트 다중 취약점(17-1029, 17-1047) 수정
This commit is contained in:
@ -355,6 +355,17 @@ function get_admin_token()
|
||||
return $token;
|
||||
}
|
||||
|
||||
//input value 에서 xss 공격 filter 역할을 함 ( 반드시 input value='' 타입에만 사용할것 )
|
||||
function get_sanitize_input($s, $is_html=false){
|
||||
|
||||
if(!$is_html){
|
||||
$s = strip_tags($s);
|
||||
}
|
||||
|
||||
$s = htmlspecialchars($s, ENT_QUOTES, 'utf-8');
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
// POST로 넘어온 토큰과 세션에 저장된 토큰 비교
|
||||
function check_admin_token()
|
||||
|
||||
@ -36,11 +36,11 @@ if ($file = $_POST['bo_include_tail']) {
|
||||
}
|
||||
|
||||
if(!is_include_path_check($_POST['bo_include_head'], 1)) {
|
||||
alert('/data/file/ 또는 /data/editor/ 포함된 문자를 상단 파일 경로에 포함시킬수 없습니다.');
|
||||
alert('상단 파일 경로에 포함시킬수 없는 문자열이 있습니다.');
|
||||
}
|
||||
|
||||
if(!is_include_path_check($_POST['bo_include_tail'], 1)) {
|
||||
alert('/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.');
|
||||
alert('하단 파일 경로에 포함시킬수 없는 문자열이 있습니다.');
|
||||
}
|
||||
|
||||
$board_path = G5_DATA_PATH.'/file/'.$bo_table;
|
||||
|
||||
@ -5,6 +5,9 @@ include_once("./_common.php");
|
||||
$spage_size = 20;
|
||||
$colspan = 10;
|
||||
|
||||
$st = isset($st) ? strip_tags($st) : '';
|
||||
$ssv = isset($ssv) ? strip_tags($ssv) : '';
|
||||
|
||||
auth_check($auth[$sub_menu], "r");
|
||||
|
||||
$g5['title'] = "문자전송 상세내역";
|
||||
@ -64,18 +67,18 @@ function all_send()
|
||||
</script>
|
||||
|
||||
<form name="search_form" method="get" action="<?php echo $_SERVER['SCRIPT_NAME']?>" class="local_sch01 local_sch">
|
||||
<input type="hidden" name="wr_no" value="<?php echo $wr_no?>">
|
||||
<input type="hidden" name="wr_renum" value="<?php echo $wr_renum?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page?>">
|
||||
<input type="hidden" name="st" value="<?php echo $st?>">
|
||||
<input type="hidden" name="sv" value="<?php echo $sv?>">
|
||||
<input type="hidden" name="wr_no" value="<?php echo get_sanitize_input($wr_no); ?>">
|
||||
<input type="hidden" name="wr_renum" value="<?php echo get_sanitize_input($wr_renum); ?>">
|
||||
<input type="hidden" name="page" value="<?php echo get_sanitize_input($page); ?>">
|
||||
<input type="hidden" name="st" value="<?php echo get_sanitize_input($st); ?>">
|
||||
<input type="hidden" name="sv" value="<?php echo get_sanitize_input($sv); ?>">
|
||||
<label for="sst" class="sound_only">검색대상</label>
|
||||
<select name="sst" id="sst">
|
||||
<option value="hs_name" <?php echo get_selected('hs_name', $sst); ?>>이름</option>
|
||||
<option value="hs_hp" <?php echo get_selected('hs_hp', $sst); ?>>휴대폰번호</option>
|
||||
</select>
|
||||
<label for="ssv" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="ssv" value="<?php echo $ssv?>" id="ssv" class="frm_input">
|
||||
<input type="text" name="ssv" value="<?php echo get_sanitize_input($ssv); ?>" id="ssv" class="frm_input">
|
||||
<input type="submit" value="검색" class="btn_submit">
|
||||
</form>
|
||||
|
||||
|
||||
@ -77,7 +77,7 @@ if (isset($wr_id) && $wr_id) {
|
||||
}
|
||||
|
||||
// 자신의 글이거나 관리자라면 통과
|
||||
if (($write['mb_id'] && $write['mb_id'] == $member['mb_id']) || $is_admin) {
|
||||
if (($write['mb_id'] && $write['mb_id'] === $member['mb_id']) || $is_admin) {
|
||||
;
|
||||
} else {
|
||||
// 비밀글이라면
|
||||
@ -93,7 +93,7 @@ if (isset($wr_id) && $wr_id) {
|
||||
and wr_reply = ''
|
||||
and wr_is_comment = 0 ";
|
||||
$row = sql_fetch($sql);
|
||||
if ($row['mb_id'] == $member['mb_id'])
|
||||
if ($row['mb_id'] === $member['mb_id'])
|
||||
$is_owner = true;
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ if (isset($wr_id) && $wr_id) {
|
||||
sql_query(" update {$write_table} set wr_hit = wr_hit + 1 where wr_id = '{$wr_id}' ");
|
||||
|
||||
// 자신의 글이면 통과
|
||||
if ($write['mb_id'] && $write['mb_id'] == $member['mb_id']) {
|
||||
if ($write['mb_id'] && $write['mb_id'] === $member['mb_id']) {
|
||||
;
|
||||
} else if ($is_guest && $board['bo_read_level'] == 1 && $write['wr_ip'] == $_SERVER['REMOTE_ADDR']) {
|
||||
// 비회원이면서 읽기레벨이 1이고 등록된 아이피가 같다면 자신의 글이므로 통과
|
||||
@ -219,7 +219,7 @@ if ($board['bo_use_nogood'])
|
||||
|
||||
$admin_href = "";
|
||||
// 최고관리자 또는 그룹관리자라면
|
||||
if ($member['mb_id'] && ($is_admin == 'super' || $group['gr_admin'] == $member['mb_id']))
|
||||
if ($member['mb_id'] && ($is_admin === 'super' || $group['gr_admin'] === $member['mb_id']))
|
||||
$admin_href = G5_ADMIN_URL.'/board_form.php?w=u&bo_table='.$bo_table;
|
||||
|
||||
include_once(G5_BBS_PATH.'/board_head.php');
|
||||
|
||||
@ -26,7 +26,7 @@ else if ($is_admin == 'group') { // 그룹관리자
|
||||
else if ($member['mb_level'] < $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
alert('자신의 권한보다 높은 권한의 회원이 작성한 글은 삭제할 수 없습니다.');
|
||||
} else if ($member['mb_id']) {
|
||||
if ($member['mb_id'] != $write['mb_id'])
|
||||
if ($member['mb_id'] !== $write['mb_id'])
|
||||
alert('자신의 글이 아니므로 삭제할 수 없습니다.');
|
||||
} else {
|
||||
if ($write['mb_id'])
|
||||
|
||||
@ -20,16 +20,16 @@ if ($is_admin == 'super') // 최고관리자 통과
|
||||
;
|
||||
else if ($is_admin == 'group') { // 그룹관리자
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] == $group['gr_admin']) { // 자신이 관리하는 그룹인가?
|
||||
if ($member['mb_id'] === $group['gr_admin']) { // 자신이 관리하는 그룹인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
alert('그룹관리자의 권한보다 높은 회원의 코멘트이므로 삭제할 수 없습니다.');
|
||||
} else
|
||||
alert('자신이 관리하는 그룹의 게시판이 아니므로 코멘트를 삭제할 수 없습니다.');
|
||||
} else if ($is_admin == 'board') { // 게시판관리자이면
|
||||
} else if ($is_admin === 'board') { // 게시판관리자이면
|
||||
$mb = get_member($write['mb_id']);
|
||||
if ($member['mb_id'] == $board['bo_admin']) { // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_id'] === $board['bo_admin']) { // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
@ -37,7 +37,7 @@ else if ($is_admin == 'group') { // 그룹관리자
|
||||
} else
|
||||
alert('자신이 관리하는 게시판이 아니므로 코멘트를 삭제할 수 없습니다.');
|
||||
} else if ($member['mb_id']) {
|
||||
if ($member['mb_id'] != $write['mb_id'])
|
||||
if ($member['mb_id'] !== $write['mb_id'])
|
||||
alert('자신의 글이 아니므로 삭제할 수 없습니다.');
|
||||
} else {
|
||||
if (!check_password($wr_password, $write['wr_password']))
|
||||
|
||||
@ -70,7 +70,7 @@ if ($member['mb_level'] >= $board['bo_reply_level'])
|
||||
// 수정, 삭제 링크
|
||||
$update_href = $delete_href = '';
|
||||
// 로그인중이고 자신의 글이라면 또는 관리자라면 비밀번호를 묻지 않고 바로 수정, 삭제 가능
|
||||
if (($member['mb_id'] && ($member['mb_id'] == $write['mb_id'])) || $is_admin) {
|
||||
if (($member['mb_id'] && ($member['mb_id'] === $write['mb_id'])) || $is_admin) {
|
||||
$update_href = './write.php?w=u&bo_table='.$bo_table.'&wr_id='.$wr_id.'&page='.$page.$qstr;
|
||||
set_session('ss_delete_token', $token = uniqid(time()));
|
||||
$delete_href ='./delete.php?bo_table='.$bo_table.'&wr_id='.$wr_id.'&token='.$token.'&page='.$page.urldecode($qstr);
|
||||
|
||||
@ -39,8 +39,8 @@ for ($i=0; $row=sql_fetch_array($result); $i++)
|
||||
$list[$i]['content'] = $list[$i]['content1']= '비밀글 입니다.';
|
||||
if (!strstr($row['wr_option'], 'secret') ||
|
||||
$is_admin ||
|
||||
($write['mb_id']==$member['mb_id'] && $member['mb_id']) ||
|
||||
($row['mb_id']==$member['mb_id'] && $member['mb_id'])) {
|
||||
($write['mb_id']===$member['mb_id'] && $member['mb_id']) ||
|
||||
($row['mb_id']===$member['mb_id'] && $member['mb_id'])) {
|
||||
$list[$i]['content1'] = $row['wr_content'];
|
||||
$list[$i]['content'] = conv_content($row['wr_content'], 0, 'wr_content');
|
||||
$list[$i]['content'] = search_font($stx, $list[$i]['content']);
|
||||
@ -71,7 +71,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++)
|
||||
|
||||
if ($member['mb_id'])
|
||||
{
|
||||
if ($row['mb_id'] == $member['mb_id'] || $is_admin)
|
||||
if ($row['mb_id'] === $member['mb_id'] || $is_admin)
|
||||
{
|
||||
set_session('ss_delete_comment_'.$row['wr_id'].'_token', $token = uniqid(time()));
|
||||
$list[$i]['del_link'] = './delete_comment.php?bo_table='.$bo_table.'&comment_id='.$row['wr_id'].'&token='.$token.'&page='.$page.$qstr;
|
||||
|
||||
@ -56,7 +56,7 @@ if ($w == '') {
|
||||
} else if ($w == 'u') {
|
||||
// 김선용 1.00 : 글쓰기 권한과 수정은 별도로 처리되어야 함
|
||||
//if ($member['mb_level'] < $board['bo_write_level']) {
|
||||
if($member['mb_id'] && $write['mb_id'] == $member['mb_id']) {
|
||||
if($member['mb_id'] && $write['mb_id'] === $member['mb_id']) {
|
||||
;
|
||||
} else if ($member['mb_level'] < $board['bo_write_level']) {
|
||||
if ($member['mb_id']) {
|
||||
@ -116,7 +116,7 @@ if ($w == '') {
|
||||
if (strstr($write['wr_option'], 'secret')) {
|
||||
if ($write['mb_id']) {
|
||||
// 회원의 경우는 해당 글쓴 회원 및 관리자
|
||||
if (!($write['mb_id'] == $member['mb_id'] || $is_admin))
|
||||
if (!($write['mb_id'] === $member['mb_id'] || $is_admin))
|
||||
alert('비밀글에는 자신 또는 관리자만 답변이 가능합니다.');
|
||||
} else {
|
||||
// 비회원의 경우는 비밀글에 답변이 불가함
|
||||
@ -168,7 +168,7 @@ if (!empty($group['gr_use_access'])) {
|
||||
alert("접근 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", 'login.php?'.$qstr.'&url='.urlencode($_SERVER['SCRIPT_NAME'].'?bo_table='.$bo_table));
|
||||
}
|
||||
|
||||
if ($is_admin == 'super' || $group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']) {
|
||||
if ($is_admin == 'super' || $group['gr_admin'] === $member['mb_id'] || $board['bo_admin'] === $member['mb_id']) {
|
||||
; // 통과
|
||||
} else {
|
||||
// 그룹접근
|
||||
@ -251,7 +251,7 @@ $is_name = false;
|
||||
$is_password = false;
|
||||
$is_email = false;
|
||||
$is_homepage = false;
|
||||
if ($is_guest || ($is_admin && $w == 'u' && $member['mb_id'] != $write['mb_id'])) {
|
||||
if ($is_guest || ($is_admin && $w == 'u' && $member['mb_id'] !== $write['mb_id'])) {
|
||||
$is_name = true;
|
||||
$is_password = true;
|
||||
$is_email = true;
|
||||
@ -308,7 +308,7 @@ if ($w == '') {
|
||||
$password_required = '';
|
||||
|
||||
if (!$is_admin) {
|
||||
if (!($is_member && $member['mb_id'] == $write['mb_id'])) {
|
||||
if (!($is_member && $member['mb_id'] === $write['mb_id'])) {
|
||||
if (!check_password($wr_password, $write['wr_password'])) {
|
||||
alert('비밀번호가 틀립니다.');
|
||||
}
|
||||
|
||||
@ -269,7 +269,7 @@ else if ($w == 'cu') // 댓글 수정
|
||||
;
|
||||
else if ($is_admin == 'group') { // 그룹관리자
|
||||
$mb = get_member($comment['mb_id']);
|
||||
if ($member['mb_id'] == $group['gr_admin']) { // 자신이 관리하는 그룹인가?
|
||||
if ($member['mb_id'] === $group['gr_admin']) { // 자신이 관리하는 그룹인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
@ -278,7 +278,7 @@ else if ($w == 'cu') // 댓글 수정
|
||||
alert('자신이 관리하는 그룹의 게시판이 아니므로 댓글을 수정할 수 없습니다.');
|
||||
} else if ($is_admin == 'board') { // 게시판관리자이면
|
||||
$mb = get_member($comment['mb_id']);
|
||||
if ($member['mb_id'] == $board['bo_admin']) { // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_id'] === $board['bo_admin']) { // 자신이 관리하는 게시판인가?
|
||||
if ($member['mb_level'] >= $mb['mb_level']) // 자신의 레벨이 크거나 같다면 통과
|
||||
;
|
||||
else
|
||||
@ -286,7 +286,7 @@ else if ($w == 'cu') // 댓글 수정
|
||||
} else
|
||||
alert('자신이 관리하는 게시판이 아니므로 댓글을 수정할 수 없습니다.');
|
||||
} else if ($member['mb_id']) {
|
||||
if ($member['mb_id'] != $comment['mb_id'])
|
||||
if ($member['mb_id'] !== $comment['mb_id'])
|
||||
alert('자신의 글이 아니므로 수정할 수 없습니다.');
|
||||
} else {
|
||||
if($comment['wr_password'] != $wr_password)
|
||||
|
||||
@ -140,7 +140,7 @@ if ($w == '' || $w == 'u') {
|
||||
}
|
||||
|
||||
// 김선용 1.00 : 글쓰기 권한과 수정은 별도로 처리되어야 함
|
||||
if($w =='u' && $member['mb_id'] && $wr['mb_id'] == $member['mb_id']) {
|
||||
if($w =='u' && $member['mb_id'] && $wr['mb_id'] === $member['mb_id']) {
|
||||
;
|
||||
} else if ($member['mb_level'] < $board['bo_write_level']) {
|
||||
alert('글을 쓸 권한이 없습니다.');
|
||||
@ -331,7 +331,7 @@ if ($w == '' || $w == 'r') {
|
||||
|
||||
if ($member['mb_id']) {
|
||||
// 자신의 글이라면
|
||||
if ($member['mb_id'] == $wr['mb_id']) {
|
||||
if ($member['mb_id'] === $wr['mb_id']) {
|
||||
$mb_id = $member['mb_id'];
|
||||
$wr_name = addslashes(clean_xss_tags($board['bo_use_name'] ? $member['mb_name'] : $member['mb_nick']));
|
||||
$wr_email = addslashes($member['mb_email']);
|
||||
|
||||
@ -3346,6 +3346,11 @@ function is_include_path_check($path='', $is_input='')
|
||||
{
|
||||
if( $path ){
|
||||
if ($is_input){
|
||||
|
||||
if( strpos($path, 'php://') !== false || strpos($path, 'zlib://') !== false || strpos($path, 'bzip2://') !== false || strpos($path, 'zip://') !== false ){
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
// whether $path is unix or not
|
||||
$unipath = strlen($path)==0 || $path{0}!='/';
|
||||
|
||||
Reference in New Issue
Block a user