gnuboard / gnuboard5 Goto Github PK
View Code? Open in Web Editor NEW그누보드5 (영카트 포함) 공개형 Git
License: Other
그누보드5 (영카트 포함) 공개형 Git
License: Other
비밀댓글 열람기준이 이상합니다.
현재는 글 작성자만 글의 모든 비밀댓글을 열람할 수 있도록 되어있습니다.
댓글에 대해 비밀대댓글을 작성하는 경우,
보통 댓글 작성자만 볼 수 있게 할 의도록 비밀대댓글을 작성할텐데,
정작 보아야할 댓글 작성자에게는 댓글이 보이지 않고,
글 작성자만 비밀대댓글을 볼 수 있게 됩니다.
다음과 같이 댓글이 작성되어있다고 가정해봅시다.
이런 구조로 댓글이 작성 되어있다고 했을 때,
사용자1가 볼 수 있는 댓글은 1, 2, 2-1, 2-3, 2-4, 3, 4
사용자2가 볼 수 있는 댓글은 1, 2, 2-1, 2-1-1, 2-2, 2-3, 2-4, 3
사용자3이 볼 수 있는 댓글은 2, 2-1, 2-1-1, 2-2, 2-3, 3, 4
이 되어야할 것 같습니다.
어느 순간부터 그누보드 5.3.1.7에서 게시판 추가/수정 및 일부 게시판의 글 쓰기가 안 되는 것을 발견했습니다.
데이터베이스를 확인해보니 g5_write_<게시판id>
테이블은 생성되어지는데 목록 테이블 g5_board
에 등록이 되지 않습니다.
그래서 데이터베이스를 새로 만들고 새로 설치를 했더니...
그누보드5 설치가 시작되었습니다.
전체 테이블 생성 완료
insert intog5_config
set cf_title = '그누보드5', cf_theme = 'basic', cf_admin = 'admin', cf_admin_email = '[email protected]', cf_admin_email_name = '그누보드5', cf_use_point = '1', cf_use_copy_log = '1', cf_login_point = '100', cf_memo_send_point = '500', cf_cut_name = '15', cf_nick_modify = '60', cf_new_skin = 'basic', cf_new_rows = '15', cf_search_skin = 'basic', cf_connect_skin = 'basic',
(중간생략)
cf_member_img_height = '60', cf_login_minutes = '10', cf_image_extension = 'gif|jpg|jpeg|png', cf_flash_extension = 'swf', cf_movie_extension = 'asx|asf|wmv|wma|mpg|mpeg|mov|avi|mp3', cf_formmail_is_member = '1', cf_page_rows = '15', cf_mobile_page_rows = '15', cf_cert_limit = '2', cf_stipulation = '해당 홈페이지에 맞는 회원가입약관을 입력합니다.', cf_privacy = '해당 홈페이지에 맞는 개인정보처리방침을 입력합니다.'
1364 : Field 'cf_add_script' doesn't have a default value
error file : /install/install_db.php
이렇게 뜹니다.
오류가 난 파일로 찾아가서 쿼리문을 mysql에 그대로 쳐도 결과는 똑같습니다.
오류가 난 cf_add_script
필드를 임의로 초기화해주니 또 cf_add_meta
에서 똑같은 오류가 납니다.
install/gnuboard5.sql
파일에 데이테베이스 구조가 나와있는 것 같은데,
그 파일이랑 충돌이 있다고 생각합니다.
이 이유로 지금 그누보드5 못 돌리고 있습니다.
빨리 다음 버전에서 해결해 주시기 바랍니다.
요며칠 그누보드로 운영하는 사이트에 계정 탈취 목적인지
계정에 로그인 시도가 계속 이루워지고있네요.
xe 이용할댄 기본으로 로그인횟수 제한이라는 기능이 있어 관리자 페이지에서
설정해놓은 횟수 초과하면 일정시간 로그인 제한 또는 해당 ip 차단이 되는데
그누보드는 그런기능이 없더군요.
혹시나 이부분에 대해 고려좀 해주시기 바랍니다.
작은별님 문의
https://sir.kr/cm_bug/11741
카카오톡 웹페이지 링크 후
그누보드5 제작 홈페이지의 게시판에서 한글 파일명 다운로드 시 URL 인코딩 파일명 그대로
다운로드되는 문제가 있습니다.
카카오톡 브라우저는 urlencode 메소드로 변환된 한글을 그대로 파일명으로 다운로드 시킴.
해당 브라우저의 유저 에이전트 데이터를 확인하니 아래와 같았습니다.
Mozilla/5.0 (Linux; Android 6.0.1; SM-N920S Build/MMB29K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36;KAKAOTALK 1908210
"KAKAOTALK"를 매칭해서 url encode를 안 하면 될 것으로 판단되어 아래와 같이 download.php 파일을 수정했습니다.
다음 그누보드5 버전 업데이트에 검토 후 반영 부탁드립니다.
파일 경로: www/bbs/download.php:88
if (preg_match("/KAKAOTALK/i", $_SERVER['HTTP_USER_AGENT'])){
$original = $file['bf_source'];
} else {
$original = urlencode($file['bf_source']);
}
wr_option이 현재
html1
, html2
, secret
, mail
4가지 옵션으로 되어 있는데..
여기에 일반 Text 나 Markdown text를 추가하고 싶은데..
secret+일반 Text(마크다운텍스트) 조합이 안되니..
이것도 미래에 맞게 wr_option_content 와 wr_option_type 식으로 나누던지
아니면 비트로
0x0100 : secret 0x0200: mail
0x01: html1, 0x02: html2, 0x04: text, 0x08:md text 식으로..
그누보드 코드를 보는데 많은 부분에서 조금 가독성이 떨어지는 것 같습니다.
PSR에 맞게끔 코드를 수정하는 것이 어떨까요?
https://github.com/gnuboard/gnuboard5/blob/master/lib/common.lib.php#L1452
'''php
$sql = preg_replace("#^select._from._union.*#i", "select 1", $sql);
'''
사용자 입력 문자열에 union이라는 문자열이 포함 되어 있으면 return 하여 의도치 않은 동작 야기.
email, mb_id 등에 union을 못사용하는 문제점 발생.
SQL injection 방지를 위함이라면 mysql_real_escape_string 사용을 건의합니다.
게시판 쪽의 훅은 많이 추가되어서 다양하게 활용하고 있습니다.
근데 영카트 쪽이 조금 부족한듯 합니다.
주문 등록,
관리자 주문 주문 변경등.
추가 부탁 드립니다.
항상 감사히 잘 사용하고 있습니다.
Existing function
function clean_relative_paths($path){
$path_len = strlen($path);
$i = 0;
while($i <= $path_len){
$result = str_replace('../', '', str_replace('\\', '/', $path));
if((string)$result === (string)$path) break;
$path = $result;
$i++;
}
return $path;
}
while
doesn't mean anything.
NEW
function clean_relative_paths($path){
return str_replace('../', '', str_replace('\\', '/', $path));
}
회원가입 이용약관 및 개인정보처리방침 동의 페이지에서
path : /bbs/register.php
개인정보처리방침안내
> 개인정보 수집 및 이용
으로 문구 변경요즘 대세가 태그를 지원하고 있습니다.
그누보드 순정에서 지원을 안하다 보니, 각자가 만들어서 사용을 하고 있는 것 같습니다.
별도로 만들어 볼까하다가, 이번 기회에 그누보드 순정에서도 태그를 지원했으면 합니다.
Line 46 in 6090b0d
$result 변수가 중복으로 사용됩니다.
이럴 경우 "신규가입회원", "최근게시물", "최근포인트발생내역" 섹션의 위치를 변경할 때 쿼리를 제대로 가져올 수 없는 경우가 발생합니다.
Why config and shop_default table is saved using vertically.
Why just do not add key,value Table with multiple records?
그래야 통합인증된 회원이 삭제될 경우에 다시 회원가입 할 수 있습니다.
write_comment_update.php에서 run_event시에 wr_id랑 comment_id도 같이 추가 되었으면 합니다.
comment_update_after 이벤트 받아서 어떤 코멘트가 작성되었는지 필요할듯 합니다.
검토 부탁드립니다.
항상 감사합니다. ^^
기존
run_event('comment_update_after', $board, $wr_id, $w, $qstr, $redirect_url);
수정
run_event('comment_update_after', $board, $wr_id,$comment_id, $w, $qstr, $redirect_url);
Some security vulnerabilities in v5.3.2.8
the details of these vulnerabilities to see
https://github.com/LoRexxar/CVE_Request/tree/master/gnuboard5%20mul%20vuls%20before%20v5.3.2.8
README.md 파일이 비어있습니다.
여기에 따르면
PASSWORD()
This function was removed in MySQL 8.0.11.
라고 하네요.
처음 설치할 때 ./gnuboard5/install/install_db.php에서 발생하구요.
sha2('$비밀번호',512);정도로 대체 가능할 것 같습니다.
로그인에도 바꿔야 할 것 같습니다.(로그인은 어떤 파일에서 처리하는지 모르겠네요...)
Lines 3282 to 3343 in de9ba8d
gnuboard5 에서 로그인 세션을 가지고 있는 경우 /bbs/member_confirm.php 에서 ?url= 파라미터에
아래와 같은 poc로 요청을 하면 www.google.com 으로 이동하게 됩니다.
대신 //@localhost:80
이 붙어 not found가 뜨지만 먼저 원하는 URL로 이동할 수 있다는 점을 이용하여 쉽게 HTTP 상태 코드 200 처리를 하여 Open Redirect 취약점을 발생시킬 수 있습니다.
POC : http://gnuboard_url/bbs/member_confirm.php?url=https://www.google.com\@localhost:80
http://gnuboard_url/bbs/member_confirm.php?url=[http/https]://[이동하고 싶은 URL]\@localhost:80
사이트를 운영하다가 규모가 어느 정도 커지면 단독서버나 클라우드서버로 옮기고 DB도 튜닝을 하게 됩니다. 동접수가 많은 사이트는 테이블 저장엔진을 InnoDB로 변경하는 것으로 성능과 안정성을 개선할 수 있는데요... 서버단에서 일괄 변환해 놓아도 나중에 게시판을 추가하면 또다시 MyISAM 저장엔진으로 생성됩니다.
common.lib.php
에서 소스를 수정하면 되지만, 업데이트시 매번 다시 바꿔줘야 하기 때문에 가능하면 소스를 수정할 필요가 없는 방향으로 개선되면 좋겠습니다.
config.php
에서 상수를 하나 정의하고, get_table_define()
등의 함수에서 CREATE TABLE
쿼리를 작성할 때 이 상수를 참조하도록 하면 편리할 것 같습니다. 기본값은 물론 MyISAM
으로 해두고요.
아니면 아예 ENGINE=MyISAM
구문을 빼버리고, DB에서 지정한 default_storage_engine
의 값을 따르도록 하는 것도 괜찮겠습니다.
summernote(http://summernote.org/) 로 기본 에디터를 변경하고 싶은데요.
https://github.com/easylogic/gnuboard5-summernote
관련해서 plugin 을 만들어뒀는데.
임시저장 기능을 이용할려면 autosave.js 를 직접 하드코딩을 해야하더라구여.
autosave.js 에 이 부분 추가 가능할까요?
gnuboard5/adm/shop_admin/itemform.php
Lines 83 to 90 in c74c04b
분류관리에서 등록한 분류가 없는 경우,
경고메세지 제공 및 분류관리 페이지로 이동 처리가 되지 않고 있습니다.
브랜치 bugfix
마크다운 에디터를 적용시켜 볼려고 했는데, 아직 호환성에 문제가 있습니다.
그래서 각 게시판별로 에디터를 설정할수 있게 부탁드립니다.
단순하게 생각해 보면 bo_use_dhtml_editor를 예를 들면..
0: 사용안함.
1: cheditor
2: smarteditor 식으로.
순서는 plugin/editor
에서 읽어 오는 순서로..
This piece of fine software makes me feel like I'm back in the 1990s. It's like using my old Pentium Pro and Windows 95! When will you add support for ActiveX?
Hey there!
I belong to an open source security research community, and a member (@wjddnjs33) has found an issue, but doesn’t know the best way to disclose it.
If not a hassle, might you kindly add a SECURITY.md
file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.
Thank you for your consideration, and I look forward to hearing from you!
(cc @huntr-helper)
gnuboard5/lib/thumbnail.lib.php
Line 252 in 4d4064c
여기 설명을 보니까요
https://feel5ny.github.io/images/2018/22/orientation.gif
$exif['Orientation'] 가 8이면 오른쪽으로 90도 돌아갔으니까
원상복구 시키려면 -90도 회전해줘야 되는거 아닌가 해서요....
반전된 사진회전도 넣어주면 좋겠네요.
path: /plugin/social/register_member.php
개인정보처리방침안내
> 개인정보 수집 및 이용
으로 문구 변경#91 이슈와 연계됩니다.
입력한 이름과 휴대폰번호를 크롬 확장 프로그램 (Typio Form Recovery 또는 자바스크립트)을 이용하여 폼 값을 수정하여 입력할 수 있습니다.
gnuboard 쓰면 기본적으로 jquery 기반이 되어 있어서 따로 jquery 버전을 올리지 않고 쓰고 있긴 한데요.
bootstrap 라이브러리의 경우 최신 버전 기능을 쓸려면 jquery 1.9.x 대 이상을 써야 하는데.
gnuboard 쪽은 기본적으로 1.8.x 를 쓰고 있어서 사용할 수가 없는 상태네요..
그래서 혹시 계획이 있는지 궁금합니다.
지금 최저지원 버전이php 5.2 기준인데
언제까지 구버전을 가지고 갈껀가요? 계획은 있는지요
cms가 계속 지원하니까 아직도 php 5.2버전으로 신규플젝하는곳 있고요
최소 5.3~5,4으로 올려야하는건 아닌지요
그누 6가 나오면 7.0이상이라던지...
get_device_change_url() url에 query에 배열이 있을시 에러 발생
발생경로
원본
if($_SERVER['QUERY_STRING']) {
foreach($_GET as $key=>$val) {
if($key == 'device')
continue;
$key = strip_tags($key);
$val = strip_tags($val);
if($key && $val)
$q[$key] = $val;
}
수정제안
if($_SERVER['QUERY_STRING']) {
foreach($_GET as $key=>$val) {
if($key == 'device')
continue;
$key = strip_tags($key);
if(is_array($val)) {
foreach ($val as &$element) {
$element = strip_tags($element);
}
} else if ($key && $val) {
$val = strip_tags($val);
}
if($key && $val)
$q[$key] = $val;
}
}
코드에 대한 문서는 따로 존재하지 않나요?
소스코드와 주석만이 존재할까요?
레퍼런스가 있을까요?
공식페이지에서 메뉴얼이나 다른 자료들도 확인을 해 보았는데, 아키텍처나 코드구조 같은건 없고 그냥 사용방법만 나와있었습니다.
그냥 코드를 보면서 구조를 파악해야할까요?
Line 40 in 9a61ea2
$caches = g5_get_cache($cache_file_name, $time_unit * $cache_time);
g5_set_cache($cache_file_name, $caches, (int)$time_unit * (int)$cache_time);
101 라인도 마찬가지입니다.
이렇게 처리하니 php 8 버전에서 에러 메세지 없이 작동이 잘 되는데 이것이 정상인가요? 아니면 제 php 설정 상의 문제인가요?
안녕하세요, 수고 많으십니다.
그누보드5를 기반으로 작업 중 누락된 테마/스킨 관련기능이 보여서 이슈등록 합니다.
1. 인증메일 재전송/변경 페이지
...
$skin_file = $member_skin_path.'/register_email.php';
if( file_exists($skin_file) ) {
include_once($skin_file);
include_once('./_tail.php');
return;
}
...
2. 관리자 > 게시물 이동/복사 팝업 페이지
이상 참고 부탁드립니다.
감사합니다.
회원탈퇴후 삭제일 N 일 후 자동 삭제 < 부분을 만약 1일로 설정하면
오늘 탈퇴하면 내일 관리자 로그인시 디비에서 삭제하는 문구가 실행되는데요.
db_table.optimize.php에서 member_delete 함수가 실행되는데
이때 member_delete 함수 내부에서 mb_leave_date 가 현재 날짜로 덮어지는 바람에 그 다음날에도 또 실행되고 또 덮어지고 하는 작업 반복되는거같습니다.
그리고 member_delete 에 회원이 이름은 삭제 하지 않던데 이도 삭제해야될꺼같습니다. ( 개인정보문제?)
또.. 30일로 지정하는 순간 30일이 넘은 유저분들이 갑자기 삭제처리 진행되면서
쪽지부분 많은 삭제하느라 시간이 걸리는거같더라구요..
그러면 관리자 입장에서는 504 time-out 가 나서 관리자분이 계속 새로고침+재로그인 시도하는 과정에서
db_table.optimize.php 가 여러번 도는바람에 부하가 좀 더 오래갔었고
탈퇴처리진행되는 유저분들의 mb_memo 에는
20150617 삭제함
20150617 삭제함
20150617 삭제함
20150617 삭제함
20150517 삭제함
20150416 삭제함
20150416 삭제함
20150416 삭제함
20150416 삭제함
20111006 삭제함
요렇게 기록되버리네요
수정부탁드립니다!
Hello
How to upgrade 5.3 to 5.4? Can i do this by just replacing files or there is db update needed and if yes, then how? Is there update tool perhaps?
i am very thankful for any help
Line 26 in ae729f1
Open redirect 취약점이 재발 할 수 있습니다.
선생님께서는 https:// http:// 로 시작하는 경우, domain이 있는 것으로 판단하셨습니다.
하지만 // 으로 시작하는 경우에도 현재 url의 프로토콜에 따라 페이지 이동이 가능하므로 // 로 시작하는 경우에도 차단이 필요해보입니다.
예시 : http://localhost/bbs/logout.php?url=//hacked.bughunting.net
메일발송을 통해 아래와 같은 오류가 나오는 경우가 있습니다.
Warning: stream_socket_enable_crypto(): Peer certificate CN=
server_name.domain.com' did not match expected CN=127.0.0.1' in /path/public_html/www/plugin/PHPMailer/class.smtp.php on line 368
위와 같은 현상이 발생시
plugin/PHPMailer/class.phpmailer.php 260라인
public $SMTPAutoTLS = true;
를 false로 변경하면 정상적으로 작동하더군요.
이 부분을 범용으로 변경하여 사용하는 것이 좋은 방법인지 몰라 이슈로 제안드립니다.
===============================================
QA 하다가 발견한 건데요.
1:1 문의 게시판에 신규 글 등록 시 파일 첨부는 지원합니다.
근데 답변 모드일 때는 파일 첨부가 기본적으로 나타나지 않죠.
그런데 답변 등록 후 답변을 수정하면 또 파일 첨부란이 뜨고 있네요.
답변 수정 모드일 때 첨부하면 파일은 등록되지만 출력되는 곳도 없고요.
에디터 업로드 이미지를 파일 복사,이동시 첨부파일처럼 함께 복사, 이동 되도록 작업중입니다.
코어를 수정하지 않고 할 수 있는 방법이 없더군요.
5.4부터 HOOK 기능이 생겨 유용하게 사용하고 있는데 기왕이면 그누보드의 여러 곳에서 HOOK의 사용이 가능하면 좋겠습니다. (아마 지금도 여러 곳에서 조금씩 더 늘어나겠지만요..)
현재의 코어 구조는 파일의 복사(이동)시 여러 게시판으로 복사(이동)하는 경우나 원글에 코멘트가 있는 경우 타겟되는 게시판의 wr_id를 가져올 수가 없습니다.
move_update.php의 run_event('bbs_move_update', $bo_table, $chk_bo_table, $wr_id_list, $opener_href);
HOOK 이전에 처리하게 되어 있는 구조라서 그렇지요.
현재의 파일 구조라면 197라인 또는 191라인 위로 HOOK이 있으면 while문이 닫히기 전에 전처리로 가능할 것 같습니다.
업데이트를 준비하면서 한 번 참고해주시면 좋겠습니다.
먼저 그누보드 만들어 주셔서 감사합니다.
근래 사이트를 제작할 일이 있어서 그누보드를 처음부터 다시 설치해서 하는데.
이걸 할 때마다 어드민 관련된 사이트를 다시 만들어야하나 고민이 많았습니다.
일단 그누보드 관리자 페이지가 맘에 딱 드는 패턴이라 여기에 메뉴추가 하고 게시판 까지 있으면 좋겠다는 생각이 들었습니다.
관리자 페이지에서 게시판 관리 이외에 실제 게시판 기능을 지원해주면 좋지 않을까 합니다.
그러면 관리자 페이지를 위해서 사이트를 다시 재구성을 안해도 될 것 같아요.
https://gist.github.com/easylogic/fc4e9ce2b60a8ab50ab9
그래서 한번 게시판을 써보자는 마음으로 했습니다. 일단 게시판 기능은 붙였는데요.
너무 부자연스러운 것 같네요.
기존 게시판 코어가 바뀔 때 마다 계속 수정하면서 써야해서 말이죠.
별로 좋은 방법은 아닌 것 같습니다.
좀 더 쉽게 구성할 수 있는 방법이 없을까요?
안녕하세요
그누보드 너무 잘 사용하고 있습니다.
댓글에 이미지 업로드 하는 기능 default로
혹시 여유가 되시면
차후 패치에 기능 포함 시켜주실수 있나요?
어디다 글써야할지 몰라서 여기가 맞는지 모르겠지만;
마리나디비 5.5
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES" 사용중인데,
/adm/boardgroup_form_update.php
43 line
$sql_common .= ", gr_use_access = '' "; 를
$sql_common .= ", gr_use_access = 0 "; 로 수정해주세요.
data type = tinyint라 인설트가 안되는듯요.
sql모드를 바꾸면 되겠지만, 0이 맞는거 같아서요.
/bbs/write.php 238 line에 아래 코드가 있는데
html_purifier 함수를 왜
" if ( $w == 'u' && (! $is_member || ! $is_admin || $write['mb_id'] !== $member['mb_id']) ) "
이조건에서만 실행 시키는건지 궁금합니다 해당 조건이면 비회원 수정시만 동작하게 되는건가요?
if ( $w == 'u' && (! $is_member || ! $is_admin || $write['mb_id'] !== $member['mb_id']) ){
// kisa 취약점 제보 xss 필터 적용
$content = get_text(html_purifier($write['wr_content']), 0);
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.