아주아주 예전.. 웹사이트에 대해서 엄청 무지했을때 그누보드를 사용해 사이트를 만들어보았습니다

아마 초등학교 때 였을텐데, 처음 설치했을때 메인화면의 휑함은.. 아직까지도 기억에 남습니다..

 

그리고 중학교때 어떤 프로젝트를 진행하다 XE를 알고 사용하게 되서 지금 라이믹스까지 오게 되었는데요, 어느정도 XE에 적응한 상태에서 그누보드를 사용해보면 어떤 느낌일까 궁금해서 sir을 탐방하고, 직접 그누보드와 기타 빌더도 사용해보게 되었습니다

 

대략 3일정도 매우 간단하게 보아서 놓친 부분이 많을테지만 그냥 저 사람은 저렇게 생각하는구나~ 하고 가볍게 봐주시면 감사하겠습니다 ㅎㅎ

 

 

 

1. 먼저 그누보드는 양질의 스킨과 작고 간단한 서드파티들이 많다

 

일단 sir 커뮤니티를 보면서 느낀 점입니다.

먼저 레이아웃을 보면 커뮤니티용 레이아웃은 찾아보기 힘들었지만, 쇼핑몰이나 회사 소개 사이트와 같은 실용적인 레이아웃들이 많았습니다

대부분이 유료로 판매되고 있기는 했지만 일단은 양이 많다는 점이 인상 깊었습니다

 

또 서드파티 기능들이 상당히 많이 올라오는 것 같았습니다.

무료로 받을 수 있는 부분만 살펴보아도 상당히 자잘한 기능들이 많아보이더군요

대부분의 기능이 XE에도 있지만, sir 쪽이 찾기 쉽고 활발히 기능들이 올라와서 그 점은 좀 부러웠습니다

그누 특성상 많은 사람들이 기본적으로 PHP를 다룰줄 알아서 그런걸까요 ㅎㅎ

 

 

2. 각 기능의 분리가 완벽하지 않아 보인다

 

XE는 크게보면 기능 확장은 모듈, 애드온으로 나뉘고, 화면 표시는 레이아웃과 위젯으로 구성되어있습니다

그런데 그누보드는 기능 확장이 XE 모듈격인 플러그인에서 그치는게 아니라 스킨단에서 주로 만들어지는것 같았습니다

 

예를 들어 별점을 주는 게시판을 만든다고 가정합니다

XE는 애드온을 사용하여 별점 등록 부분을 따로 만든다던가, 아예 게시판 기능을 카피한 별점 모듈을 만들어 해당 기능을 구현합니다

하지만 그누보드는 해당 기능을 플러그인에서 구현하기보단, 게시판 스킨(?)에 그냥 별점 부분을 하드코딩하여 그 스킨을 배포하는 그런 느낌이였습니다

 

확실히 눈에 보이는 것만 코딩하면 되니 상당히 개발이 편해보이기는 했습니다만, 큰 프로젝트를 해보니 MVC구조가 얼마나 효율적인지 알게되서..

그누의 특성으로 보지만 그렇게 부러운 코딩 방식은 아니네요.. ㅜ

또 사이트 관리자 기준으로 보면 단일 동작에는 문제가 없지만 여러 기능을 복합적으로 적용하려면 좀 머리가 아플지도 모르겠습니다

 

 

3. 정말 raw한 PHP의 정수를 보여준다

 

이게 제가 글을 쓰게 된 이유랄까 본론인 것 같습니다

 

XE는 action="/"으로 index.php로 form data를 보내고, 그 데이터 속에 act나 기타 값들을 보내면서 목적지를 알려줍니다

그누보드는 form 데이터를 write_submit.php와 같이 일반 php로 보내버립니다

이건 뭐 딱히 문제가 되지는 않습니다.

 

그런데 그 값을 받는 php가 참 놀랍더라고요..

일단 include ('./common.php'); 로 시작해서 그누보드 기능들을 불러오는데, 솔직히 그누보드의 기능이 강력하지는 않은거 같습니다

$act, $is_admin과 같이 그누보드 변수, 그리고 g5_로 시작하는 그누보드 상수 말고는 큰 역할을 하는거 같지는 않고요

데이터를 받아오는것도 $_POST['~~'];로 깡으로 받아오니 무슨 값이 들어오던 개발자 자신이 직접 보안 처리를 해야하네요..

 

여기까지는 그냥 조금 주의를 기울이면 큰 문제는 안되니 넘어간다만

DB 쿼리등을 PHP에서 직접 짜는데, 참 이 상태가 놀랍습니다..

 

직접 짜는건 그렇다 치는데, 개발자마다 다를테지만 변수를 그냥 query에 넣는것은 물론 post로 받아온 값을 그냥 아무 처리없이 query string에 박아 넣으시는 분도 계시고, 그렇다고 안전하게 그누보드 측에서 무언가를 처리해주는것도 아니고..

다 좋습니다만 PHP 표준에 명백하게 반하는 소스도 있고, 참 중구난방입니다..

PDO는 몰라도 stmt 정도는 사용할 수 있을텐데, 그누보드에서 지원을 하지 않는건지 stmt를 사용한 자료도 찾기 어려웠습니다

 

 

아무튼 간단하게만 보아서 놓친 부분이 많을테지만 그누보드를 보고 참 여러가지를 생각하게 만들어주네요..

한번 그누보드쪽도 개발해볼까 생각하고 있긴 하지만, 저에게는 아직 XE 구조가 더 안정적으로 보여서 여기에 남아있고 싶네요

정말 라이믹스의 존재에 감사하고 있습니다 ㅜㅜ

리버스

profile
모듈 제작하는 현역 대학생 리버스입니다!

== 판매중인 모듈 ==
미션] https://xetown.com/thirdparties/1511787
길드] https://xetown.com/thirdparties/1387146
  • profile

    서드파티는 정말 많은데, 2번 문제 때문에 조합하기가 힘들지요.

    별점 기능도 있고 추천 관련 확장기능도 있고 신고 관련 확장기능도 있지만

    소스를 직접 파악해서 직접 조합하지 않으면 그 기능들을 한꺼번에 적용하기가 어렵다는... ㅠㅠ

     

    SQL 보안은 순전히 이 부분 덕분에 유지되는 겁니다. magic_quotes_gpc와 거의 똑같은 방식이지만,

    그누보드5는 UTF-8 전용이므로 이 방법으로도 큰 문제가 생기지는 않습니다.

       https://github.com/gnuboard/gnuboard5/blob/master/common.php#L108

     

    심지어 모든 GET, POST 파라미터를 전역으로 풀어서 register_globals 시절의 영광을 되찾아 주는데요.. ㅋㅋ

    이것도 충돌 가능성이 있는 변수들을 미리 제거해 주는 방식으로 땜빵합니다.

       https://github.com/gnuboard/gnuboard5/blob/master/common.php#L17

     

    common.php에서 해주는 게 별로 없어 보일 수도 있지만, 이런 것들이 굉장히 중요해요.

    덕분에 쉽게 뚫리지는 않습니다.

    따지고 보면 XE의 Context 변수들도 비슷한 방식으로 처리되지요.

     

    비번 암호화 방식도 제가 예전에 PHP스쿨에서 배포했던 pbkdf2.compat.php가

    얼마 전부터 기본 적용되었더군요. 그누보드 코어 개발팀은 나름 보안에 꽤 신경쓰는 듯 합니다.

    다만 서드파티들이 어디로 튈지 모른다는 것이 함정...

  • profile
    저또한 구조적으로는 확실히 라이믹스가 뛰어납니다. 확장성도 뛰어나고... 다만 자료나 커뮤니티에서 밀리는것 같네요.
    제가 만든 업체소개 게시판의 경우 라이믹스를 기본으로 해서 그누 공부고 할겸해서 재미삼아 그누보드5 용을 만들었는데... 그누보드5용 주문이 훨씬 많네요조금 안타깝네요.
  • ?
    아직 그누보드 분석이 덜되신거같은데 그누보드도 당연히 get post 파라미터에 대해서 다 자동으로 처리합니다 sql 인젝션 공격 방어하구요 다만 처리한 결과를 다시 $_post에 되돌려놓는것뿐이에요. 그누 보안이 생각하는 수준이었다면 이미 그누보드 쓰는 사이트들은 다 뚫렸겠죠
  • ? profile

    위에 기진곰님이 올려주신 부분을 보고 해당 부분은 이해했습니다

    3일 단순히 지켜보고 끝낸거라 놓친 부분이 많다고 생각했고요, 위에서도 적어놨고요..
    전문적으로 분석한게 아니라 단순히 겉핥기식으로 적은 글인데 제 글 읽고 기분이 상하셨나봅니다..

    저는 그누를 전문적으로 다뤄보지 않았기 때문에 그쪽이 어떤식으로 작동되는지 알지도 못했으며
    그누가 좋아하는 네이티브 PHP 관점에서 보면 이상한게 맞기 때문에 글을 쓴겁니다
    처리를 안했다고 가정하면 _get으로 받아온 값을 DB에 그대로 넣는게 말 그대로 미친거니 거기에 의문을 품는 건 당연하다고 할 수 있지 않나요?
    인터넷에 널린 글만 봐도 절대로 받아온 파라메터 그대로 넣지 말라고 하고, 별도의 변수를 만들어서 넣으니 그냥 일반인 관점에서는 그누보드의 소스가 이상하게 보일 수밖에 없죠

    아무튼 그누보드 열심히 패치하는거 알고 있고, 지금까지 쉽게 뚫렸다는 말이 없었으니 어련히 잘 돌아가는 소스겠지만, 제 오지랖이 넓었던거 같고요

    추가로 언급하자면 단비아빠님께서는 그누보드에 대해서 잘 알고계신거 같지만 단비아빠님의 말투에서 저를 무시하는 느낌이 심하게 드는거 같습니다
    말씀하신 부분에 비판은 받아들일 수 있으나 개인적으로 그렇게 기분이 좋지는 않네요

    아무튼 정확하지 않은 정보로 여기 언급한점에 대해 죄송하게 생각합니다

  • profile ?

    별도의 변수를 만들지 않고 $_POST에 돌려넣는게 그누의 개발철학이고 매력이죠.
    그래도 님은 공부를 좀 한편이에요. 그러니까 $_POST 에 있는 파라미터값을 그대로 쓰면
    보안에 위험하다는 것도 알고 처리해야 한다는 것도 알죠.
    하지만 그걸 모르는 사람이라면? 아니면 안다고 해도 귀찮다고 생각하고 $_POST를
    그냥 쓰는 사람이라면?
    $_POST에 들어있던 값을 다른 변수에 옮겨 담았다고 치죠. 그럼 그런 변수가 따로
    있다는거 정도는 미리 알아야 쓰겠죠? 그런 식으로 프레임워크가 PHP 베이직에서
    멀어져서 많은걸 별도로 제공할수록 사용자는 더 많은걸 공부해야 하고 그만큼
    어려워지겠죠? 하지만 그누보드는 별도의 문서가 아예 없습니다...
    그누는 그런걸 공부안해도 되는게 최고의 장점인겁니다. PHP 아주 기본밖에 모르는
    사람도 소스에 바로 손댈 수 있어요. PHP가 많이 업그레이드되면서 클래스같은 것도
    생기고 꽤 고급스러워졌지만 원래 옛날 PHP 3.x 시절부터의 전통은 사실 그런게
    아니거든요. 그누보드는 아주 옛날부터의 PHP 전통을 아직까지도 그대로 이어가는
    보기 드문 소스라고 할 수 있죠. 암것도 모르는 생초짜가 홈페이지를 만들고
    운영하려면 어떻게 해야 하는가... 거대한 소스의 구조같은거 신경 안쓰고

    그냥 직관적으로 수정해야 할 위치를 찾아서 한두줄씩 고쳐보면 고친대로

    바로 결과가 나오는 그런 소스...
    그누는 그런 생초짜한테 건드리기 쉬운 나름 구조화되고 보안도 잘 챙긴
    그런 날것 소스를 던져주는 개념이라고 할 수 있죠...

  • ?

    그리고 그누의 구조에 대해서 평하자면 나름의 구조는 있어요 파일 이름을 이용해서 원하는 위치에 동작을 끼워넣을 수도 있구요.. 다만 안타까운건 그냥 스킨에다가 왕창 때려박는 식으로 다들 한다는거죠 별점같은거 그누도 위젯 형태로 만들 수 있습니다.. 다만 안해도 된다는거 안따르는편이 더 빠르고 쉽다는게 그누의 매력이면서 한계죠 1회성 작업 남의 사이트 잠깐 수정 이런거 헐때는 그누가 편합니다

  • ? ?

    문제는 그누보고 공부한분들이 그누아닌곳에서도 그냥 GET, POST에 있는 파라미터 그대로 DB에 갖다 쓰더라고요
    취업했는데 그누보드랑 같은 DB쓰는 api라고 만들어놓은 소스가 그모양이였죠 common.php안거치고 바로 냅다 꽂는..

    그누자체로는 보안다 설정해서 다시 전역에 풀어놔서 편한데 그거모르고
    저게 옳은줄 아는사람들이 꽤나 많을지도 모릅니다.

    그런의미에서 리버스님댓글 공감갑니다.

     

    PHP자체 함수도 사람했갈리게 만드는데 그거로 만들어진 소스도 허허...