J

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

· 2016-05-11 (수) 03:06:15 · 2944 · 1

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

개인적으로는 자바랑 씨샵때문에 어느샌가 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개

2016-05-17 (화) 18:40:27
기존 그누보드 소스에 추가되어도 좋을듯 싶은데요..! ^^
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
16-06-03 조회 2,775
15-07-30 조회 3,304
15-06-08 조회 5,438
15-05-27 조회 4,294
15-01-08 조회 6,570
14-12-30 조회 5,301
14-10-10 조회 5,256
14-08-13 조회 6,226
14-08-11 조회 5,044
14-08-06 조회 6,384
14-03-19 조회 7,319
13-04-26 조회 9,489
12-12-15 조회 5,030
12-12-15 조회 7,262
12-12-11 조회 5,366
12-11-21 조회 5,860
12-10-11 조회 4,968
12-10-03 조회 4,654
12-09-20 조회 5,996
12-09-02 조회 4,141
12-08-29 조회 5,074
12-08-29 조회 3,979
12-08-24 조회 4,102
12-08-18 조회 4,347
12-08-17 조회 4,385
12-08-16 조회 3,638
12-08-06 조회 5,406
12-08-05 조회 4,697
12-08-03 조회 4,422
12-08-03 조회 4,569
12-07-29 조회 3,403
12-07-24 조회 4,002
12-07-22 조회 3,490
12-07-20 조회 4,190
12-07-19 조회 4,526
12-07-19 조회 3,820
12-07-19 조회 3,778
12-07-19 조회 5,452
12-07-19 조회 3,395
12-07-18 조회 4,959
12-07-15 조회 3,977
12-07-14 조회 3,693
12-07-12 조회 4,399
12-07-11 조회 3,675
12-07-11 조회 3,385
12-07-11 조회 3,344
12-07-10 조회 4,510
12-07-09 조회 3,238
12-07-09 조회 4,115
12-07-09 조회 4,520
12-07-08 조회 4,436
12-07-07 조회 5,379
12-07-06 조회 4,646
12-07-06 조회 3,903
12-07-06 조회 3,699
12-07-06 조회 3,678
12-07-02 조회 5,382
12-07-02 조회 4,090
12-06-29 조회 3,582
12-06-28 조회 4,201
12-06-26 조회 3,694
12-06-26 조회 4,815
12-06-21 조회 3,779
12-06-20 조회 4,477
12-06-20 조회 4,052
12-06-15 조회 4,468
12-06-15 조회 4,217
12-06-13 조회 7,237
12-06-05 조회 7,206
12-06-04 조회 3,813
12-06-03 조회 3,659
12-05-31 조회 3,661
12-05-28 조회 6,479
12-05-27 조회 3,736
12-05-25 조회 3,886
12-05-23 조회 4,212
12-05-21 조회 4,986
12-05-17 조회 3,947
12-05-17 조회 3,860
12-05-09 조회 3,913
12-05-07 조회 4,158
12-05-02 조회 4,395
12-05-01 조회 4,551
12-04-30 조회 3,301
12-04-30 조회 4,254
12-04-25 조회 4,322
12-04-25 조회 4,759
12-04-24 조회 3,733
12-04-24 조회 4,496
12-04-23 조회 3,513
12-04-20 조회 3,153
12-04-17 조회 5,347
12-04-16 조회 4,257
12-04-14 조회 3,552
12-04-14 조회 3,587
12-04-14 조회 3,644
12-04-13 조회 3,272
12-04-13 조회 4,456
12-04-13 조회 6,052
12-04-12 조회 3,211