2026, 새로운 도약을 시작합니다.

그누보드 아이콘 gif말고 다른 이미지 포멧도 추가하기

있는지 모르겠는데 그누보드 처음써보면서 코드가 직관적이라 참 편하다 느낍니다.

개인적으로는 자바랑 씨샵때문에 어느샌가 php도 객체지향으로 떡칠해갔었는데.. 

아무튼  커뮤니티 하나 만들려고 보니 귀차니즘이 도래해서 XE랑 워드프레스는 써봤지만 그누보드 안써봐서 (고친적은 몇번있습니다만) 해보니 단순해서 좋네요.

레벨올리기 위해서 글 올려봅니다. (중복이라면 죄송합니다.)

그누보드 5 최신판입니다.

수정해야할 파일 목록

/bbs/register_form.php

/bbs/register_form_update.php

/skin/basic/member/register_form.skin.php

두곳을 수정해야됩니다.

코드 먼저 써드리고 후일담 나눌께요.

보기보단 간단합니다.

/bbs/register_form.php 

------------ Line 112 ----------

// 회원아이콘 경로

$mb_icon_path = G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

$mb_icon_url  = G5_DATA_URL.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

============아래처럼 바꿔줍니다 ===========>

// 회원아이콘 경로

if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.gif'))

    $ext = '.gif';

else if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.jpg'))

    $ext = '.jpg';

else if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.png'))

    $ext = '.png';

$mb_icon_path = G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

$mb_icon_url  = G5_DATA_URL.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

/* 그누보드의 프로필 사진이 DB 기반이 아니라 멤버 아이디에서 가져오는 파일명 기반이라 다음과 같이 처리했습니다. 다르게 쓰셔도 되는데 예전부터 떠돌던 소문에 if else if 가 php에서 가장빠르다고 해서 파일 유무 체크 함수가 가벼운축에 속하지도 않아서 if else 로 썼습니다. 깔끔하려면  case를 써도 괜찮겠네요 */

/bbs/register_form_update.php

Line 352

// 아이콘 삭제

if (isset($_POST['del_mb_icon'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

}

============아래처럼 바꿔줍니다 ===========> 

// 아이콘 삭제

if (isset($_POST['del_mb_icon'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

    @unlink($mb_dir.'/'.$mb_id.'.jpg');

    @unlink($mb_dir.'/'.$mb_id.'.png');

}



Line 359 
(위에꺼 넣으셧으면 361번 줄이 됩니다. 이건 제가 수정을 많이 해서 원래 꺼를 모르겠네요... '//인증메일 발송' 전 부분까지 교체해주시면 됩니다. 원래 코드랑 비교를 하셔도 되겠네요.)

// 아이콘 업로드

$mb_icon = '';

if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

    @unlink($mb_dir.'/'.$mb_id.'.jpg');

    @unlink($mb_dir.'/'.$mb_id.'.png');

     $path = pathinfo($_FILES['mb_icon']['name']);     

     $ext = strtolower($path['extension']); 

    if ($ext == 'gif' ||  $ext == 'jpg' ||  $ext == 'png') {

        // 아이콘 용량이 설정값보다 이하만 업로드 가능

        if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {

            @mkdir($mb_dir, G5_DIR_PERMISSION);

            @chmod($mb_dir, G5_DIR_PERMISSION);    

            $dest_path = $mb_dir.'/'.$mb_id.'.'.$ext;

            move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);

            chmod($dest_path, G5_FILE_PERMISSION);

            if (file_exists($dest_path)) {

                //=================================================================\

                // 090714

                // gif 파일에 악성코드를 심어 업로드 하는 경우를 방지

                // 에러메세지는 출력하지 않는다.

                //-----------------------------------------------------------------

                $size = getimagesize($dest_path);

                if ($size[2] != 1 && $size[2] != 2 && $size[2] != 3) // gif 파일이 아니면 올라간 이미지를 삭제한다.

                    @unlink($dest_path);

                else

                // 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제

                if ($size[0] > $config['cf_member_icon_width'] || $size[1] > $config['cf_member_icon_height'])

                    @unlink($dest_path);

                //=================================================================\

            }

        } else {

            $msg .= '회원아이콘을 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';

        }

    } else {

        $msg .= $_FILES['mb_icon']['name'].'은(는) 이미지 파일이 아닙니다.';

    }

}

/skin/basic/member/register_form.skin.php 

Line 409

  if (!f.mb_icon.value.toLowerCase().match(/.(gif)$/i)) {

=============>

  if (!f.mb_icon.value.toLowerCase().match(/.(gif|png|jpg)$/i)) { 

후일담...

직관적이라 너무 좋네요 php단에서 막는데 궂이 자바스크립트 단에서도 막아야 됐나 하는 생각도 살짝 들었습니다만 뭐 폼넘기기전에 체크하면 부하가 1이라도 없으니 좋은거고 자바스크리브로만 막으면 또 쉽게 뚫어버리긴하죠

개인적으로 이쪽 함수가 좀 더 탄탄했으면 하는 생각도 듭니다. getimagesize함수로만 체크가 되면 이미지에 악성코드 섞는 공격에는 조금 취약할 수 있지 않나.. 하는데 제가 아직 그누보드 코드를 다 열어본건 아니라 감히 말하기가 그렇네요 (이미 다말해놓고...?)

필요하신분 도움되셨으면 합니다~~

|

댓글 1개

기존 그누보드 소스에 추가되어도 좋을듯 싶은데요..! ^^

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

프로그램

+
번호 제목 글쓴이 날짜 조회
8230 9년 전 조회 22
8229 9년 전 조회 25
8228 9년 전 조회 62
8227 9년 전 조회 72
8226 9년 전 조회 118
8225 9년 전 조회 100
8224 9년 전 조회 93
8223 9년 전 조회 54
8222 9년 전 조회 126
8221 9년 전 조회 38
8220 9년 전 조회 36
8219 9년 전 조회 38
8218 9년 전 조회 73
8217 9년 전 조회 51
8216 9년 전 조회 101
8215 9년 전 조회 56
8214 9년 전 조회 175
8213 9년 전 조회 117
8212 9년 전 조회 22
8211 9년 전 조회 192
8210 9년 전 조회 181
8209 9년 전 조회 282
8208 9년 전 조회 154
8207 9년 전 조회 171
8206 9년 전 조회 127
8205 9년 전 조회 120
8204 9년 전 조회 76
8203 9년 전 조회 168
8202 9년 전 조회 97
8201 9년 전 조회 137
8200 9년 전 조회 96
8199 9년 전 조회 150
8198 9년 전 조회 124
8197 9년 전 조회 103
8196 9년 전 조회 482
8195 9년 전 조회 104
8194 9년 전 조회 239
8193 9년 전 조회 109
8192 9년 전 조회 134
8191 9년 전 조회 87
8190 9년 전 조회 83
8189 9년 전 조회 141
8188 9년 전 조회 72
8187 9년 전 조회 91
8186 9년 전 조회 102
8185 9년 전 조회 260
8184 9년 전 조회 57
8183 9년 전 조회 287
8182 9년 전 조회 117
8181 9년 전 조회 84
8180 9년 전 조회 647
8179 9년 전 조회 443
8178 9년 전 조회 248
8177 9년 전 조회 253
8176 9년 전 조회 298
8175 9년 전 조회 174
8174 9년 전 조회 178
8173 9년 전 조회 295
8172 9년 전 조회 138
8171 9년 전 조회 138
8170 9년 전 조회 246
8169 9년 전 조회 215
8168 9년 전 조회 263
8167 9년 전 조회 276
8166 9년 전 조회 188
8165 9년 전 조회 129
8164 9년 전 조회 247
8163 9년 전 조회 235
8162 9년 전 조회 245
8161 9년 전 조회 234
8160 9년 전 조회 437
8159 9년 전 조회 341
8158 9년 전 조회 163
8157 9년 전 조회 307
8156 9년 전 조회 219
8155 9년 전 조회 201
8154 9년 전 조회 541
8153 9년 전 조회 178
8152 9년 전 조회 346
8151 9년 전 조회 359
8150 9년 전 조회 445
8149 9년 전 조회 285
8148 9년 전 조회 113
8147 9년 전 조회 332
8146 9년 전 조회 386
8145 9년 전 조회 306
8144 9년 전 조회 272
8143 9년 전 조회 125
8142 9년 전 조회 377
8141 9년 전 조회 329
8140 9년 전 조회 870
8139 9년 전 조회 193
8138 9년 전 조회 340
8137 9년 전 조회 318
8136 9년 전 조회 683
8135 9년 전 조회 722
8134 9년 전 조회 437
8133 9년 전 조회 387
8132 9년 전 조회 401
8131 9년 전 조회 754
🐛 버그신고