J

그누보드 아이콘 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년 전 조회 24
8229 9년 전 조회 28
8228 9년 전 조회 64
8227 9년 전 조회 75
8226 9년 전 조회 119
8225 9년 전 조회 104
8224 9년 전 조회 95
8223 9년 전 조회 57
8222 9년 전 조회 128
8221 9년 전 조회 40
8220 9년 전 조회 38
8219 9년 전 조회 39
8218 9년 전 조회 76
8217 9년 전 조회 55
8216 9년 전 조회 106
8215 9년 전 조회 58
8214 9년 전 조회 179
8213 9년 전 조회 121
8212 9년 전 조회 26
8211 9년 전 조회 196
8210 9년 전 조회 188
8209 9년 전 조회 285
8208 9년 전 조회 158
8207 9년 전 조회 175
8206 9년 전 조회 130
8205 9년 전 조회 123
8204 9년 전 조회 80
8203 9년 전 조회 170
8202 9년 전 조회 100
8201 9년 전 조회 140
8200 9년 전 조회 99
8199 9년 전 조회 153
8198 9년 전 조회 128
8197 9년 전 조회 105
8196 9년 전 조회 485
8195 9년 전 조회 110
8194 9년 전 조회 245
8193 9년 전 조회 113
8192 9년 전 조회 137
8191 9년 전 조회 90
8190 9년 전 조회 87
8189 9년 전 조회 144
8188 9년 전 조회 75
8187 9년 전 조회 94
8186 9년 전 조회 107
8185 9년 전 조회 262
8184 9년 전 조회 62
8183 9년 전 조회 290
8182 9년 전 조회 122
8181 9년 전 조회 85
8180 9년 전 조회 649
8179 9년 전 조회 447
8178 9년 전 조회 251
8177 9년 전 조회 257
8176 9년 전 조회 302
8175 9년 전 조회 179
8174 9년 전 조회 181
8173 9년 전 조회 298
8172 9년 전 조회 143
8171 9년 전 조회 143
8170 9년 전 조회 252
8169 9년 전 조회 218
8168 9년 전 조회 265
8167 9년 전 조회 279
8166 9년 전 조회 192
8165 9년 전 조회 133
8164 9년 전 조회 258
8163 9년 전 조회 239
8162 9년 전 조회 248
8161 9년 전 조회 237
8160 9년 전 조회 440
8159 9년 전 조회 345
8158 9년 전 조회 170
8157 9년 전 조회 315
8156 9년 전 조회 222
8155 9년 전 조회 206
8154 9년 전 조회 544
8153 9년 전 조회 180
8152 9년 전 조회 349
8151 9년 전 조회 360
8150 9년 전 조회 447
8149 9년 전 조회 289
8148 9년 전 조회 117
8147 9년 전 조회 335
8146 9년 전 조회 393
8145 9년 전 조회 309
8144 9년 전 조회 278
8143 9년 전 조회 130
8142 9년 전 조회 382
8141 9년 전 조회 332
8140 9년 전 조회 873
8139 9년 전 조회 198
8138 9년 전 조회 342
8137 9년 전 조회 324
8136 9년 전 조회 686
8135 9년 전 조회 726
8134 9년 전 조회 441
8133 9년 전 조회 391
8132 9년 전 조회 405
8131 9년 전 조회 758
🐛 버그신고