J

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

· 2016-05-11 (수) 03:06:15 · 2834 · 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-07-24 조회 1,814
16-07-21 조회 1,855
16-07-20 조회 1,941
16-07-15 조회 2,020
16-07-14 조회 2,055
16-07-13 조회 2,013
16-07-12 조회 2,151
16-07-12 조회 2,167
16-07-12 조회 2,150
16-07-11 조회 2,064
16-07-08 조회 2,106
16-07-07 조회 2,033
16-07-04 조회 2,131
16-07-04 조회 2,109
16-07-04 조회 2,083
16-06-30 조회 2,624
16-06-27 조회 2,480
16-06-24 조회 2,353
16-06-24 조회 2,327
16-06-24 조회 2,274
16-06-23 조회 2,622
16-06-23 조회 2,171
16-06-22 조회 2,177
16-06-22 조회 2,335
16-06-22 조회 2,213
16-06-21 조회 2,252
16-06-21 조회 2,297
16-06-21 조회 2,104
16-06-20 조회 2,300
16-06-20 조회 2,326
16-06-20 조회 2,249
16-06-19 조회 2,304
16-06-19 조회 2,380
16-06-19 조회 2,254
16-06-18 조회 2,250
16-06-18 조회 2,293
16-06-18 조회 2,418
16-06-12 조회 2,976
16-06-11 조회 2,774
16-06-10 조회 2,741
16-06-05 조회 2,596
16-06-04 조회 2,661
16-06-03 조회 2,693
16-05-26 조회 2,670
16-05-23 조회 2,876
16-05-23 조회 2,774
16-05-19 조회 2,651
16-05-16 조회 2,646
16-05-15 조회 3,139
16-05-12 조회 2,796
16-05-11 조회 2,930
16-05-11 조회 2,670
16-05-11 조회 2,835
16-05-04 조회 2,887
16-05-01 조회 2,880
16-04-28 조회 3,157
16-04-27 조회 3,356
16-04-12 조회 2,984
16-04-01 조회 2,896
16-03-31 조회 2,897
16-03-29 조회 3,279
16-03-27 조회 2,759
16-03-21 조회 2,989
16-03-21 조회 2,832
16-03-19 조회 2,921
16-03-19 조회 2,797
16-03-18 조회 3,051
16-03-17 조회 2,755
16-03-17 조회 2,791
16-03-16 조회 2,726
16-03-15 조회 2,804
16-03-15 조회 2,741
16-03-15 조회 2,685
16-03-14 조회 2,843
16-03-14 조회 2,719
16-03-13 조회 2,735
16-03-11 조회 2,722
16-03-11 조회 2,844
16-03-10 조회 2,616
16-03-09 조회 2,854
16-03-09 조회 2,578
16-03-09 조회 2,745
16-03-09 조회 2,519
16-03-08 조회 2,785
16-03-08 조회 2,595
16-03-08 조회 2,616
16-03-08 조회 2,765
16-03-07 조회 2,597
16-03-07 조회 2,679
16-03-07 조회 2,641
16-03-02 조회 3,028
16-02-29 조회 2,971
16-02-25 조회 2,993
16-02-23 조회 2,952
16-02-22 조회 2,805
16-02-18 조회 2,857
16-02-18 조회 3,019
16-02-16 조회 2,698
16-02-15 조회 3,054
16-02-12 조회 3,028