Compare commits

..
122 Commits
Author SHA1 Message Date
thisgun 1971be3186 Merge branch 'master' of github.com:gnuboard/g5 2020-10-07 10:52:40 +09:00
thisgun df9891e68b 버전 5.4.2.9 수정 2020-10-07 10:40:35 +09:00
thisgun d19cfdc722 php7.4버전이후 array Deprecate curly brace syntax 영향으로 코드 수정 2020-10-06 18:26:45 +09:00
thisgun 158a7f50d8 관리자 -> 게시판수정에서 컬럼명 추가 sql 코드 수정 2020-10-06 17:12:11 +09:00
thisgun 2ff4306cc6 다운로드 header attachment 코드 수정 2020-09-28 16:59:59 +09:00
thisgun 2f9bb48342 최신글과 각 게시물 리스트 이미지 출력 태그에 hook 적용 2020-09-24 15:20:31 +09:00
thisgun 69c839ef0f 관리자 회원목록에 툴팁 텍스트 추가 2020-09-09 11:02:35 +09:00
thisgun 5353f75284 Merge branch 'master' of github.com:gnuboard/g5 2020-08-13 11:11:16 +09:00
thisgun 5ba1e37f04 버전 5.4.2.8 수정 2020-08-13 09:58:57 +09:00
thisgun 4648b49711 게시판 별로 에디터를 선택시 나오는 수정2 2020-08-13 09:58:05 +09:00
thisgun cf3a4e9e95 reserve_mb_nick 함수 코드 수정 2020-08-11 18:20:12 +09:00
thisgun fc4b095fa1 썸네일과 htmlpurifier 필터링에 대한 hook 코드 추가 2020-08-11 17:59:14 +09:00
thisgun 12eabe4930 탈퇴된 회원에게 쪽지를 보낼수 있는 오류 수정 2020-07-29 17:31:27 +09:00
thisgun 3e04f1403f 게시판 별로 에디터를 선택할수 있게 수정 2020-07-29 17:11:28 +09:00
thisgun dd7bd68e72 RSS 잘못된 링크 코드 수정 2020-07-14 17:51:13 +09:00
thisgun ccf8a27713 SMS 리턴 코드 추가 2020-07-14 17:09:36 +09:00
thisgun 94a8cc3eb6 관리자 SMS 휴대폰번호 관리 페이지 오류 수정 2020-06-26 12:11:12 +09:00
thisgun 63822016d5 get_member 함수 유효성 검사 코드 수정 2020-06-17 19:56:18 +09:00
thisgun 84dd9f0766 Merge branch 'master' of github.com:gnuboard/g5 2020-06-11 12:24:58 +09:00
thisgun 5aa60540fa 버전 5.4.2.7 수정 2020-06-11 11:18:22 +09:00
thisgun 8aaafeddf6 5.4 버전 회원탈퇴와 관리권한설정에 이벤트 HOOK 추가 2020-06-10 11:34:19 +09:00
thisgun 8c49fbafb8 5.4.2.6 패치에서 잘못 수정으로 캡챠 mp3가 로드되지 문제 수정 2020-06-10 10:48:56 +09:00
thisgun c2dbb74920 hook class filters 메소드에서 중첩이 안되는 오류 수정 2020-06-05 17:51:23 +09:00
thisgun a16926a4de Merge branch 'master' of github.com:gnuboard/g5 2020-06-05 11:21:29 +09:00
thisgun 73a72af338 버전 5.4.2.6 수정 2020-06-05 11:20:45 +09:00
thisgun 7cd161c576 소셜로그인 IOS 12 버전대에서 안되는 현상 수정 2020-06-05 10:45:07 +09:00
thisgun 426e4e2819 PHP Warning count 경고문 코드 수정 및 기타 코드 수정 2020-06-04 17:21:40 +09:00
thisgun b90b15ac77 인스톨시 토큰을 생성하는 코드 수정 2020-06-04 15:29:43 +09:00
thisgun 6da105bd64 [KVE-2020-0288,0319,0320]그누보드 다중 취약점 수정 2020-06-04 15:13:20 +09:00
thisgun f1152df518 NHN_KCP 윈도우 본인인증 모듈 추가 2020-06-01 12:01:23 +09:00
thisgun c875121931 Merge branch 'master' of github.com:gnuboard/g5 2020-05-08 16:02:40 +09:00
thisgun c7f1466751 버전 5.4.2.5 수정 2020-05-08 15:12:53 +09:00
minsupkr 045e1363a4 Merge branch 'master' of github.com:gnuboard/g5 2020-05-06 11:59:02 +09:00
minsupkr 812dbc78e0 회원가입 완료에서 html syntax 오류 수정 10396 2020-05-06 11:58:54 +09:00
thisgun 468bc6eb1c [KVE-2020-0273]Cross Site Scripting(XSS) 취약점 수정 2020-04-27 15:45:21 +09:00
thisgun 4c41828e73 [KVE-2020-0200,0202]그누보드,영카트 다중취약점 수정 2020-04-23 17:33:23 +09:00
thisgun 1dc7e5640d 회원 사이드뷰 no 프로필 이미지 사이즈 설정 코드 수정 2020-04-20 16:50:27 +09:00
thisgun e221783c20 잘못된 표기 또는 문법 수정 2020-04-17 13:48:55 +09:00
thisgun 548b992588 5.4 버전 게시판 스킨 코드 수정 2020-04-14 17:43:02 +09:00
thisgun 6cc2bfdd50 Merge branch 'master' of github.com:gnuboard/g5 2020-04-13 16:18:49 +09:00
thisgun 101d5995fa 버전 5.4.2.4 수정 2020-04-13 16:05:06 +09:00
thisgun ecb6226599 아이코드 JSON 버전 적용 및 토큰키 입력 추가 2020-04-13 16:04:35 +09:00
thisgun 50edf32875 get_group 함수 실행 전 배열 체크 코드 추가 2020-04-13 16:03:21 +09:00
thisgun 68feb602ff 5.4버전 게시물 복사이동시 hook 코드 추가 2020-04-07 17:24:35 +09:00
thisgun 7b4a11b99d WEBVIEW 내 파일 다운로드 문제 download Attribute 추가 2020-04-07 11:46:48 +09:00
thisgun 3883924258 5.4 버전 게시판 리스트 스킨 인기게시물 아이콘 위치 수정 2020-04-06 17:56:26 +09:00
thisgun d6d6773fbb 그누보드 XSS 취약점 수정 2020-04-03 12:27:16 +09:00
thisgun 1cc2b141f9 get_group 함수 실행시 string 인지 체크 2020-04-03 12:24:24 +09:00
thisgun 28d1001d1b Merge branch 'master' of github.com:gnuboard/g5 2020-04-03 10:01:33 +09:00
thisgun ab1d514eb4 5.4 게시판스킨 검색창이 안보이는 오류 수정 2020-04-02 18:46:36 +09:00
thisgun a2bad15bfe php7.4 버전에서 경고메시지 나오는 문법 수정 2020-04-02 17:02:29 +09:00
minsupkr b069485c53 최근게시물 : 불분명한 selector 수정, galley > gallery 버그 10335 2020-03-31 11:59:30 +09:00
minsupkr 67126bcbe1 게시판 : 갤러리스킨 gall_img height 지정 버그 10331 2020-03-31 11:54:39 +09:00
minsupkr 81444b42b1 관리자 > 환경설정 > 메뉴설정 : 메뉴 추가 시 추가 삭제 버튼 클래스 수정2 2020-03-25 20:56:46 +09:00
minsupkr dad97445f8 관리자 > 환경설정 > 메뉴설정 : 메뉴 추가 시 추가 삭제 버튼 클래스 수정 2020-03-25 20:54:16 +09:00
thisgun 05a88d12de 5.4 버전 게시판 리스트 스킨 css 코드 수정 2020-03-18 12:30:20 +09:00
thisgun ff4ac1d626 Merge branch 'master' of github.com:gnuboard/g5 2020-03-13 11:27:57 +09:00
thisgun 7a7af424ce 버전 5.4.2.3 수정 2020-03-13 11:12:03 +09:00
thisgun ae75f5bf7a 5.4 버전 그룹 최신글 코드 수정 2020-03-11 16:50:01 +09:00
thisgun 86f8c1a1c1 게시판 삭제시 좋아요 테이블의 기록도 삭제 코드 추가 2020-03-10 19:40:32 +09:00
thisgun a5d959deb8 html_process 클래스 코드 수정 2020-03-09 16:52:08 +09:00
thisgun f5b7b3000c 5.4 버전 최신글 cache 설정 하지 않을시 오류 수정 2020-03-09 12:20:52 +09:00
thisgun fff7e074ff Merge branch 'master' of github.com:gnuboard/g5 2020-03-03 18:48:19 +09:00
thisgun c1adf30b05 버전 5.4.2.2 수정 2020-03-03 18:47:15 +09:00
thisgun a8292a51bd php deprecated 사용되는 코드 재수정 2020-03-03 18:46:17 +09:00
thisgun b28796dd28 [KVE-2020-0115,0120]그누보드RCE및XSS취약점수정 2020-03-03 18:41:45 +09:00
thisgun 8dd2fe58e6 Merge branch 'master' of github.com:gnuboard/g5 2020-03-03 12:01:16 +09:00
thisgun 1395a8f338 버전 5.4.2.1 수정 2020-03-03 11:12:51 +09:00
thisgun 799aefada2 php deprecated 사용되는 코드 수정 2020-03-03 11:08:24 +09:00
thisgun 87bb2f1d8a [KVE-2020-0097,0113,0114,0056]그누보드 다중 취약점 수정 2020-03-02 22:08:54 +09:00
thisgun 6fe20b0a13 [KVE-2020-0013]그누보드_Reflect XSS_수정 2020-03-02 20:23:38 +09:00
thisgun 31705f32c9 [KVE-2020-0104,105,106]그누보드XSS취약점 수정 2020-03-02 20:02:45 +09:00
thisgun 8ba373a951 회원정보 수정시 체크과정 변경 2020-03-02 19:53:17 +09:00
thisgun 8067a20d32 썸네일 center_mode 시 썸네일 height가 원본이미지가 작을때도 동작되게 수정 2020-02-24 17:13:26 +09:00
thisgun e72b71ce12 5.4버전 SNS 동시등록 과 비밀글 태그 위치가 겹치는 스킨 코드 오류 수정 2020-02-19 17:14:00 +09:00
thisgun 596ad4baa6 5.4버전 관리자 에서 게시판 복사시 G5_DB_ENGINE 설정 오류 수정 2020-02-19 10:38:24 +09:00
thisgun 1600f63dee Merge branch 'master' of github.com:gnuboard/g5 2020-02-18 15:24:01 +09:00
thisgun fa9aa8da19 버전 5.4.2 수정 2020-02-18 15:06:37 +09:00
thisgun 85e075a5c6 [KVE-2020-0062]그누보드,영카트 SQL 인젝션 취약점 수정 2020-02-18 12:28:32 +09:00
thisgun 1e7d17fd68 5.4 버전 소셜로그인 스킨 5.3버전에서도 잘 나올수 있도록 수정 2020-02-14 14:35:33 +09:00
thisgun 6ccb8905a0 크롬 80버전 대응 코드 추가 2020-02-14 11:44:04 +09:00
thisgun ebac40312f 5.4 버전 쪽지보기 페이지에서 쪽지 삭제가 안되는 오류 수정 2020-02-13 19:03:38 +09:00
thisgun 3c0cde3fe2 그누보드 XSS 취약점 수정 2020-02-13 16:24:27 +09:00
thisgun 3cf0546711 [KVE-2020-0100,0101]그누보드 관리자페이지 XSS 취약점 수정 2020-02-13 15:23:11 +09:00
thisgun 120d8cf564 [KVE-2019-1571,1573,1578,1580]그누보드 XSS 취약점 수정 2020-02-13 13:48:37 +09:00
thisgun 992d3d93f4 [KVE-2019-1581,1585,1586,1590,2020-0012]그누보드XSS취약점 수정 2020-02-12 11:33:53 +09:00
thisgun 30e0b93ecf get_member_profile_img 함수 내 코드 오류 수정 2020-02-11 15:08:59 +09:00
thisgun 2581bdba9b 5.4버전 exist_seo_url 함수 내 정규식 코드 수정 2020-02-10 19:03:56 +09:00
thisgun d982361541 get_class_encrypt 함수내 잘못된 코드 수정 2020-02-10 17:32:50 +09:00
thisgun e82ebd7ada 카카오 로그인 v2 사용자 정보 요청api로 수정 2020-02-10 16:29:30 +09:00
thisgun 2d1af9a3b2 sms 설치테이블 G5_DB_ENGINE 설정에 따르게 수정 2020-02-10 14:05:30 +09:00
thisgun da29b6d0bb Merge branch 'master' of github.com:gnuboard/g5 2020-02-07 18:19:36 +09:00
thisgun 4493674762 버전 5.4.1.9 수정 2020-02-07 18:14:31 +09:00
thisgun 2e0b99f65c 크롬 80 버전 대응 kcb okname 본인인증 코드 수정 2020-02-07 17:39:22 +09:00
thisgun cc5eb6e520 Merge branch 'master' of github.com:gnuboard/g5 2020-02-04 11:24:30 +09:00
thisgun b855bbfb96 버전 5.4.1.8 수정 2020-02-04 11:23:24 +09:00
thisgun 93753162be 크롬 80버전 samesite 추가 대응 코드 2020-02-04 11:21:10 +09:00
thisgun 726863de44 Merge branch 'master' of github.com:gnuboard/g5 2020-01-31 16:03:22 +09:00
thisgun 69ec7348b8 버전 5.4.1.7 수정 2020-01-31 15:56:27 +09:00
thisgun d8521d4543 크롬 브라우저 80버전 samesite 이슈 대응 코드 2020-01-31 15:55:35 +09:00
thisgun e6eab2d040 [KVE-2019-1517] 그누보드 5_Cross Site Scripting(XSS) 취약점 수정 2020-01-23 10:58:18 +09:00
thisgun 2ad151c0dd 짧은 URL 변환 체크코드 및 스킨 내 코드 오타 수정 2020-01-23 10:57:07 +09:00
thisgun 4c17f79783 5.4 버전 쪽지보내기 스킨 오타 수정 2020-01-14 16:47:06 +09:00
thisgun e329192586 관리자 토큰생성시 button submit 추가 2020-01-14 16:40:58 +09:00
thisgun f96c3558e8 5.4 버전에서 잘못되거나 누락된 코드 수정 2020-01-13 16:31:53 +09:00
thisgun f2a1af5f46 Merge branch 'master' of github.com:gnuboard/g5 2020-01-07 16:34:04 +09:00
thisgun aec86e4360 버전 5.4.1.4 수정 2020-01-07 14:47:58 +09:00
thisgun 6a934c7a36 5.4 버전 모바일 게시판 스킨 내 오타 수정 2020-01-07 14:37:19 +09:00
thisgun ccfe419bbd 54버전 잘못된 hook 이벤트 수정 2020-01-07 14:34:50 +09:00
thisgun 4b0969d244 Merge branch 'master' of github.com:gnuboard/g5 2019-12-27 16:05:56 +09:00
thisgun a5e5531471 php 문법 each deprecated 에 대한 코드 수정 2019-12-27 16:05:04 +09:00
thisgun 5a3c2b628d 잘못된 오타 수정 2019-12-27 09:54:41 +09:00
thisgun b5152b62e8 Merge branch 'master' of github.com:gnuboard/g5 2019-12-23 10:12:10 +09:00
thisgun de59f07a66 버전 5.4.1.3 수정 2019-12-23 10:02:59 +09:00
thisgun 32e024f52e css js 버전 코드 수정 2019-12-23 10:01:29 +09:00
thisgun ffc43056b4 관리자 디비업그레이드시 체크 과정 추가 2019-12-23 09:59:05 +09:00
thisgun 6016db4a95 [KVE-2019-1508]XSS 취약점 수정 2019-12-20 11:18:16 +09:00
thisgun 30f6f09372 theme 설정 hook 이벤트 추가 2019-12-20 11:17:17 +09:00
thisgun d10a1667c7 html_process 변수에 method가 존재하는지 체크과정 추가 2019-12-18 19:55:34 +09:00
thisgun d560892a80 kcaptcha 페이지 오타 수정 2019-12-17 17:15:47 +09:00
thisgun 4e11c1fc1f iframe 허용 조건에 www.google.com 추가 2019-12-16 16:30:25 +09:00
thisgun 54c69dcf35 회원 사이드 뷰 사용시 최신글에서 사용되는 코드 수정 2019-12-10 17:04:28 +09:00
181 changed files with 6225 additions and 729 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ function imageview(id, w, h)
<h1><?php echo $config['cf_title'] ?></h1>
<div id="hd_top">
<button type="button" id="btn_gnb" class="btn_gnb_close <?php echo $adm_menu_cookie['btn_gnb'];?>">메뉴</button>
<div id="logo"><a href="<?php echo correct_goto_url(G5_ADMIN_URL); ?>"><img src="<?php echo G5_ADMIN_URL ?>/img/logo.png" alt="<?php echo $config['cf_title'] ?> 관리자"></a></div>
<div id="logo"><a href="<?php echo correct_goto_url(G5_ADMIN_URL); ?>"><img src="<?php echo G5_ADMIN_URL ?>/img/logo.png" alt="<?php echo get_text($config['cf_title']); ?> 관리자"></a></div>
<div id="tnb">
<ul>
+1 -1
View File
@@ -108,7 +108,7 @@ function get_ajax_token()
}
$(function() {
$(document).on("click", "form input:submit", function() {
$(document).on("click", "form input:submit, form button:submit", function() {
var f = this.form;
var token = get_ajax_token();
+2 -2
View File
@@ -477,8 +477,8 @@ function admin_check_xss_params($params){
if( is_array($value) ){
admin_check_xss_params($value);
} else if ( preg_match('/<\s?[^\>]*\/?\s?>/i', $value) && (preg_match('/script.*?\/script/ius', $value) || preg_match('/[onload|onerror]=.*/ius', $value)) ){
alert('요청 쿼리에 잘못된 스크립트문장이 있습니다.\\nXSS 공격일수도 있습니다.');
} else if ( (preg_match('/<\s?[^\>]*\/?\s?>/i', $value) && (preg_match('/script.*?\/script/ius', $value) || preg_match('/[onload|onerror]=.*/ius', $value))) || preg_match('/^(?=.*token\()(?=.*xmlhttprequest\()(?=.*send\().*$/im', $value) || (preg_match('/[onload|onerror|focus]=.*/ius', $value) && preg_match('/(eval|expression|exec|prompt)(\s*)\((.*)\)/ius', $value)) ){
alert('요청 쿼리에 잘못된 스크립트문장이 있습니다.\\nXSS 공격일수도 있습니다.', G5_URL);
die();
}
}
+19 -1
View File
@@ -160,7 +160,7 @@ $pagelist = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_w
echo $pagelist;
?>
<form name="fauthlist2" id="fauthlist2" action="./auth_update.php" method="post" autocomplete="off">
<form name="fauthlist2" id="fauthlist2" action="./auth_update.php" method="post" autocomplete="off" onsubmit="return fauth_add_submit(this);">
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
<input type="hidden" name="stx" value="<?php echo $stx ?>">
<input type="hidden" name="sst" value="<?php echo $sst ?>">
@@ -218,6 +218,17 @@ echo $pagelist;
<label for="d">d (삭제)</label>
</td>
</tr>
<tr>
<th scope="row">자동등록방지</th>
<td>
<?php
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
$captcha_html = captcha_html();
$captcha_js = chk_captcha_js();
echo $captcha_html;
?>
</td>
</tr>
</tbody>
</table>
</div>
@@ -230,6 +241,13 @@ echo $pagelist;
</form>
<script>
function fauth_add_submit(f){
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
return true;
}
function fauthlist_submit(f)
{
if (!is_checked("chk[]")) {
+2
View File
@@ -28,6 +28,8 @@ for ($i=0; $i<$count; $i++)
$sql = " delete from {$g5['auth_table']} where mb_id = '".$mb_id."' and au_menu = '".$au_menu."' ";
sql_query($sql);
run_event('adm_auth_delete_member', $mb_id, $au_menu);
}
goto_url('./auth_list.php?'.$qstr);
+19
View File
@@ -1,6 +1,7 @@
<?php
$sub_menu = "100200";
include_once('./_common.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
if ($is_admin != 'super')
alert('최고관리자만 접근 가능합니다.');
@@ -11,6 +12,12 @@ if (!$mb['mb_id'])
check_admin_token();
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
if (!chk_captcha()) {
alert('자동등록방지 숫자가 틀렸습니다.');
}
$sql = " insert into {$g5['auth_table']}
set mb_id = '{$_POST['mb_id']}',
au_menu = '{$_POST['au_menu']}',
@@ -26,5 +33,17 @@ if (!$result) {
//sql_query(" OPTIMIZE TABLE `$g5['auth_table']` ");
// 세션을 체크하여 하루에 한번만 메일알림이 가게 합니다.
if( str_replace('-', '', G5_TIME_YMD) !== get_session('adm_auth_update') ){
$site_url = preg_replace('/^www\./', '', strtolower($_SERVER['SERVER_NAME']));
$to_email = 'gnuboard@'.$site_url;
mailer($config['cf_admin_email_name'], $to_email, $config['cf_admin_email'], '['.$config['cf_title'].'] 관리권한설정 알림', '<p><b>['.$config['cf_title'].'] 관리권한설정 변경 안내</b></p><p style="padding-top:1em">회원 아이디 '.$mb['mb_id'].' 에 관리권한이 추가 되었습니다.</p><p style="padding-top:1em">'.G5_TIME_YMDHIS.'</p><p style="padding-top:1em"><a href="'.G5_URL.'" target="_blank">'.$config['cf_title'].'</a></p>', 1);
set_session('adm_auth_update', str_replace('-', '', G5_TIME_YMD));
}
run_event('adm_auth_update', $mb);
goto_url('./auth_list.php?'.$qstr);
?>
+1 -1
View File
@@ -31,7 +31,7 @@ include_once(G5_PATH.'/head.sub.php');
</tr>
<tr>
<th scope="col"><label for="target_subject">게시판 제목<strong class="sound_only">필수</strong></label></th>
<td><input type="text" name="target_subject" value="[복사본] <?php echo $board['bo_subject'] ?>" id="target_subject" required class="required frm_input" maxlength="120"></td>
<td><input type="text" name="target_subject" value="[복사본] <?php echo get_sanitize_input($board['bo_subject']); ?>" id="target_subject" required class="required frm_input" maxlength="120"></td>
</tr>
<tr>
<th scope="col">복사 유형</th>
+2
View File
@@ -11,6 +11,8 @@ check_admin_token();
$target_table = trim($_POST['target_table']);
$target_subject = trim($_POST['target_subject']);
$target_subject = strip_tags(clean_xss_attributes($target_subject));
if (!preg_match('/[A-Za-z0-9_]{1,20}/', $target_table)) {
alert('게시판 TABLE명은 공백없이 영문자, 숫자, _ 만 사용 가능합니다. (20자 이내)');
}
+3
View File
@@ -26,6 +26,9 @@ sql_query(" delete from {$g5['board_file_table']} where bo_table = '{$tmp_bo_tab
// 게시판 테이블 DROP
sql_query(" drop table {$g5['write_prefix']}{$tmp_bo_table} ", FALSE);
// 좋아요 테이블에서 기록 삭제
sql_query(" delete from {$g5['board_good_table']} where bo_table = '{$tmp_bo_table}' ");
delete_cache_latest($tmp_bo_table);
// 게시판 폴더 전체 삭제
+29 -1
View File
@@ -77,11 +77,18 @@ if (!isset($board['bo_mobile_subject'])) {
}
if (!isset($board['bo_use_captcha'])) {
sql_query(" ALTER TABLE `{$g5['board_table']}` ADD `bo_use_captcha` TINYINT NOT NULL DEFAULT '0' AFTER `bo_use_sns` ");
sql_query(" ALTER TABLE `{$g5['board_table']}` ADD `bo_use_captcha` TINYINT NOT NULL DEFAULT '0' AFTER `bo_use_sns` ", false);
}
if (!isset($board['bo_select_editor'])) {
sql_query(" ALTER TABLE `{$g5['board_table']}` ADD `bo_select_editor` VARCHAR(50) NOT NULL DEFAULT '' AFTER `bo_use_dhtml_editor` ", false);
}
run_event('adm_board_form_before', $board, $w);
$required = "";
$readonly = "";
$sound_only = "";
if ($w == '') {
$html_title .= ' 생성';
@@ -481,6 +488,27 @@ $pg_anchor = '<ul class="anchor">
<label for="chk_all_use_dhtml_editor">전체적용</label>
</td>
</tr>
<tr>
<th scope="row"><label for="bo_select_editor">게시판 에디터 선택</label></th>
<td>
<?php echo help('게시판에 사용할 에디터를 설정합니다. 스킨에 따라 적용되지 않을 수 있습니다.') ?>
<select name="bo_select_editor" id="bo_select_editor">
<?php
$arr = get_skin_dir('', G5_EDITOR_PATH);
for ($i=0; $i<count($arr); $i++) {
if ($i == 0) echo "<option value=\"\">기본환경설정의 에디터 사용</option>";
echo "<option value=\"".$arr[$i]."\"".get_selected($board['bo_select_editor'], $arr[$i]).">".$arr[$i]."</option>\n";
}
?>
</select>
</td>
<td class="td_grpset">
<input type="checkbox" name="chk_grp_select_editor" value="1" id="chk_grp_select_editor">
<label for="chk_grp_select_editor">그룹적용</label>
<input type="checkbox" name="chk_all_select_editor" value="1" id="chk_all_select_editor">
<label for="chk_all_select_editor">전체적용</label>
</td>
</tr>
<tr>
<th scope="row"><label for="bo_use_rss_view">RSS 보이기 사용</label></th>
<td>
+15 -7
View File
@@ -60,6 +60,11 @@ if(!is_include_path_check($bo_include_tail, 1)) {
alert('하단 파일 경로에 포함시킬수 없는 문자열이 있습니다.');
}
if( function_exists('filter_input_include_path') ){
$bo_include_head = filter_input_include_path($bo_include_head);
$bo_include_tail = filter_input_include_path($bo_include_tail);
}
$board_path = G5_DATA_PATH.'/file/'.$bo_table;
// 게시판 디렉토리 생성
@@ -76,12 +81,12 @@ $f = @fopen($file, 'w');
// 분류에 & 나 = 는 사용이 불가하므로 2바이트로 바꾼다.
$src_char = array('&', '=');
$dst_char = array('&', '〓');
$bo_category_list = str_replace($src_char, $dst_char, $bo_category_list);
$bo_category_list = isset($_POST['bo_category_list']) ? str_replace($src_char, $dst_char, $_POST['bo_category_list']) : '';
//https://github.com/gnuboard/gnuboard5/commit/f5f4925d4eb28ba1af728e1065fc2bdd9ce1da58 에 따른 조치
$str_bo_category_list = isset($_POST['bo_category_list']) ? preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", "", $_POST['bo_category_list']) : '';
$str_bo_category_list = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", "", $bo_category_list);
$_POST['bo_subject'] = strip_tags($_POST['bo_subject']);
$_POST['bo_mobile_subject'] = strip_tags($_POST['bo_mobile_subject']);
$_POST['bo_subject'] = strip_tags(clean_xss_attributes($_POST['bo_subject']));
$_POST['bo_mobile_subject'] = strip_tags(clean_xss_attributes($_POST['bo_mobile_subject']));
$sql_common = " gr_id = '{$gr_id}',
bo_subject = '{$_POST['bo_subject']}',
@@ -109,6 +114,7 @@ $sql_common = " gr_id = '{$gr_id}',
bo_use_file_content = '{$_POST['bo_use_file_content']}',
bo_use_secret = '{$_POST['bo_use_secret']}',
bo_use_dhtml_editor = '{$_POST['bo_use_dhtml_editor']}',
bo_select_editor = '{$_POST['bo_select_editor']}',
bo_use_rss_view = '{$_POST['bo_use_rss_view']}',
bo_use_good = '{$_POST['bo_use_good']}',
bo_use_nogood = '{$_POST['bo_use_nogood']}',
@@ -199,7 +205,7 @@ if ($w == '') {
$file = file('./sql_write.sql');
$file = get_db_create_replace($file);
$sql = implode($file, "\n");
$sql = implode("\n", $file);
$create_table = $g5['write_prefix'] . $bo_table;
@@ -289,13 +295,14 @@ if (is_checked('chk_grp_write_point')) $grp_fields .= " , bo_write_poin
if (is_checked('chk_grp_comment_point')) $grp_fields .= " , bo_comment_point = '{$bo_comment_point}' ";
if (is_checked('chk_grp_download_point')) $grp_fields .= " , bo_download_point = '{$bo_download_point}' ";
if (is_checked('chk_grp_category_list')) {
$grp_fields .= " , bo_category_list = '{$bo_category_list}' ";
$grp_fields .= " , bo_category_list = '{$str_bo_category_list}' ";
$grp_fields .= " , bo_use_category = '{$bo_use_category}' ";
}
if (is_checked('chk_grp_use_sideview')) $grp_fields .= " , bo_use_sideview = '{$bo_use_sideview}' ";
if (is_checked('chk_grp_use_file_content')) $grp_fields .= " , bo_use_file_content = '{$bo_use_file_content}' ";
if (is_checked('chk_grp_use_secret')) $grp_fields .= " , bo_use_secret = '{$bo_use_secret}' ";
if (is_checked('chk_grp_use_dhtml_editor')) $grp_fields .= " , bo_use_dhtml_editor = '{$bo_use_dhtml_editor}' ";
if (is_checked('chk_grp_select_editor')) $grp_fields .= " , bo_select_editor = '{$bo_select_editor}' ";
if (is_checked('chk_grp_use_rss_view')) $grp_fields .= " , bo_use_rss_view = '{$bo_use_rss_view}' ";
if (is_checked('chk_grp_use_good')) $grp_fields .= " , bo_use_good = '{$bo_use_good}' ";
if (is_checked('chk_grp_use_nogood')) $grp_fields .= " , bo_use_nogood = '{$bo_use_nogood}' ";
@@ -378,13 +385,14 @@ if (is_checked('chk_all_write_point')) $all_fields .= " , bo_write_poin
if (is_checked('chk_all_comment_point')) $all_fields .= " , bo_comment_point = '{$bo_comment_point}' ";
if (is_checked('chk_all_download_point')) $all_fields .= " , bo_download_point = '{$bo_download_point}' ";
if (is_checked('chk_all_category_list')) {
$all_fields .= " , bo_category_list = '{$bo_category_list}' ";
$all_fields .= " , bo_category_list = '{$str_bo_category_list}' ";
$all_fields .= " , bo_use_category = '{$bo_use_category}' ";
}
if (is_checked('chk_all_use_sideview')) $all_fields .= " , bo_use_sideview = '{$bo_use_sideview}' ";
if (is_checked('chk_all_use_file_content')) $all_fields .= " , bo_use_file_content = '{$bo_use_file_content}' ";
if (is_checked('chk_all_use_secret')) $all_fields .= " , bo_use_secret = '{$bo_use_secret}' ";
if (is_checked('chk_all_use_dhtml_editor')) $all_fields .= " , bo_use_dhtml_editor = '{$bo_use_dhtml_editor}' ";
if (is_checked('chk_all_select_editor')) $all_fields .= " , bo_select_editor = '{$bo_select_editor}' ";
if (is_checked('chk_all_use_rss_view')) $all_fields .= " , bo_use_rss_view = '{$bo_use_rss_view}' ";
if (is_checked('chk_all_use_good')) $all_fields .= " , bo_use_good = '{$bo_use_good}' ";
if (is_checked('chk_all_use_nogood')) $all_fields .= " , bo_use_nogood = '{$bo_use_nogood}' ";
+1 -1
View File
@@ -33,7 +33,7 @@ if ($_POST['act_button'] == "선택수정") {
alert('최고관리자가 아닌 경우 다른 관리자의 게시판('.$board_table[$k].')은 수정이 불가합니다.');
}
$p_bo_subject = is_array($_POST['bo_subject']) ? strip_tags($_POST['bo_subject'][$k]) : '';
$p_bo_subject = is_array($_POST['bo_subject']) ? strip_tags(clean_xss_attributes($_POST['bo_subject'][$k])) : '';
$sql = " update {$g5['board_table']}
set gr_id = '".sql_real_escape_string(strip_tags($_POST['gr_id'][$k]))."',
+1 -1
View File
@@ -16,7 +16,7 @@ if (!preg_match("/^([A-Za-z0-9_]{1,10})$/", $_POST['gr_id']))
if (!$gr_subject) alert('그룹 제목을 입력하세요.');
$gr_subject = isset($_POST['gr_subject']) ? strip_tags($_POST['gr_subject']) : '';
$gr_subject = isset($_POST['gr_subject']) ? strip_tags(clean_xss_attributes($_POST['gr_subject'])) : '';
$sql_common = " gr_subject = '{$gr_subject}',
gr_device = '{$_POST['gr_device']}',
+3 -3
View File
@@ -124,7 +124,7 @@ $colspan = 10;
<tr class="<?php echo $bg; ?>">
<td class="td_chk">
<input type="hidden" name="group_id[<?php echo $i ?>]" value="<?php echo $row['gr_id'] ?>">
<label for="chk_<?php echo $i; ?>" class="sound_only"><?php echo $row['gr_subject'] ?> 그룹</label>
<label for="chk_<?php echo $i; ?>" class="sound_only"><?php echo get_text($row['gr_subject']); ?> 그룹</label>
<input type="checkbox" name="chk[]" value="<?php echo $i ?>" id="chk_<?php echo $i ?>">
</td>
<td class="td_left"><a href="<?php echo G5_BBS_URL ?>/group.php?gr_id=<?php echo $row['gr_id'] ?>"><?php echo $row['gr_id'] ?></a></td>
@@ -135,9 +135,9 @@ $colspan = 10;
<td class="td_mng td_input">
<?php if ($is_admin == 'super'){ ?>
<label for="gr_admin_<?php echo $i; ?>" class="sound_only">그룹관리자</label>
<input type="text" name="gr_admin[<?php echo $i ?>]" value="<?php echo $row['gr_admin'] ?>" id="gr_admin_<?php echo $i ?>" class="tbl_input" size="10" maxlength="20">
<input type="text" name="gr_admin[<?php echo $i ?>]" value="<?php echo get_sanitize_input($row['gr_admin']); ?>" id="gr_admin_<?php echo $i ?>" class="tbl_input" size="10" maxlength="20">
<?php }else{ ?>
<input type="hidden" name="gr_admin[<?php echo $i ?>]" value="<?php echo $row['gr_admin'] ?>"><?php echo $row['gr_admin'] ?>
<input type="hidden" name="gr_admin[<?php echo $i ?>]" value="<?php echo get_sanitize_input($row['gr_admin']); ?>"><?php echo get_text($row['gr_admin']); ?>
<?php } ?>
</td>
<td class="td_num"><a href="./board_list.php?sfl=a.gr_id&amp;stx=<?php echo $row['gr_id'] ?>"><?php echo $row2['cnt'] ?></a></td>
+2 -2
View File
@@ -19,8 +19,8 @@ for ($i=0; $i<$count; $i++)
{
$k = $_POST['chk'][$i];
$gr_id = preg_replace('/[^a-z0-9_]/i', '', $_POST['group_id'][$k]);
$gr_subject = is_array($_POST['gr_subject']) ? strip_tags($_POST['gr_subject'][$k]) : '';
$gr_admin = is_array($_POST['gr_admin']) ? strip_tags($_POST['gr_admin'][$k]) : '';
$gr_subject = is_array($_POST['gr_subject']) ? strip_tags(clean_xss_attributes($_POST['gr_subject'][$k])) : '';
$gr_admin = is_array($_POST['gr_admin']) ? strip_tags(clean_xss_attributes($_POST['gr_admin'][$k])) : '';
if($_POST['act_button'] == '선택수정') {
$sql = " update {$g5['group_table']}
+42 -21
View File
@@ -271,6 +271,13 @@ if(!isset($member['mb_scrap_cnt'])) {
ADD `mb_scrap_cnt` int(11) NOT NULL DEFAULT '0' AFTER `mb_memo_cnt`", true);
}
// 아이코드 토큰키 추가
if( ! isset($config['cf_icode_token_key']) ){
$sql = "ALTER TABLE `{$g5['config_table']}`
ADD COLUMN `cf_icode_token_key` VARCHAR(100) NOT NULL DEFAULT '' AFTER `cf_icode_server_port`; ";
sql_query($sql, false);
}
if(!$config['cf_faq_skin']) $config['cf_faq_skin'] = "basic";
if(!$config['cf_mobile_faq_skin']) $config['cf_mobile_faq_skin'] = "basic";
@@ -321,7 +328,7 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
<tbody>
<tr>
<th scope="row"><label for="cf_title">홈페이지 제목<strong class="sound_only">필수</strong></label></th>
<td colspan="3"><input type="text" name="cf_title" value="<?php echo $config['cf_title'] ?>" id="cf_title" required class="required frm_input" size="40"></td>
<td colspan="3"><input type="text" name="cf_title" value="<?php echo get_sanitize_input($config['cf_title']); ?>" id="cf_title" required class="required frm_input" size="40"></td>
</tr>
<tr>
<th scope="row"><label for="cf_admin">최고관리자<strong class="sound_only">필수</strong></label></th>
@@ -1257,29 +1264,29 @@ include_once('_rewrite_config_form.php');
<tr>
<th scope="row"><label for="cf_sms_type">SMS 전송유형</label></th>
<td>
<?php echo help("전송유형을 SMS로 선택하시면 최대 80바이트까지 전송하실 수 있으며<br>LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 1500바이트까지 LMS로 전송됩니다.<br>요금은 건당 SMS는 16원, LMS는 48원입니다."); ?>
<?php echo help("전송유형을 SMS로 선택하시면 최대 80바이트까지 전송하실 수 있으며<br>LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 ".G5_ICODE_LMS_MAX_LENGTH."바이트까지 LMS로 전송됩니다.<br>요금은 건당 SMS는 16원, LMS는 48원입니다."); ?>
<select id="cf_sms_type" name="cf_sms_type">
<option value="" <?php echo get_selected($config['cf_sms_type'], ''); ?>>SMS</option>
<option value="LMS" <?php echo get_selected($config['cf_sms_type'], 'LMS'); ?>>LMS</option>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_icode_id">아이코드 회원아이디</label></th>
<tr class="icode_old_version">
<th scope="row"><label for="cf_icode_id">아이코드 회원아이디<br>(구버전)</label></th>
<td>
<?php echo help("아이코드에서 사용하시는 회원아이디를 입력합니다."); ?>
<input type="text" name="cf_icode_id" value="<?php echo $config['cf_icode_id']; ?>" id="cf_icode_id" class="frm_input" size="20">
</td>
</tr>
<tr>
<th scope="row"><label for="cf_icode_pw">아이코드 비밀번호</label></th>
<tr class="icode_old_version">
<th scope="row"><label for="cf_icode_pw">아이코드 비밀번호<br>(구버전)</label></th>
<td>
<?php echo help("아이코드에서 사용하시는 비밀번호를 입력합니다."); ?>
<input type="password" name="cf_icode_pw" value="<?php echo $config['cf_icode_pw']; ?>" id="cf_icode_pw" class="frm_input">
</td>
</tr>
<tr>
<th scope="row">요금제</th>
<tr class="icode_old_version <?php if(!(isset($userinfo['payment']) && $userinfo['payment'])){ echo 'cf_tr_hide'; } ?>">
<th scope="row">요금제<br>(구버전)</th>
<td>
<input type="hidden" name="cf_icode_server_ip" value="<?php echo $config['cf_icode_server_ip']; ?>">
<?php
@@ -1296,21 +1303,31 @@ include_once('_rewrite_config_form.php');
?>
</td>
</tr>
<tr>
<th scope="row">아이코드 SMS 신청<br>회원가입</th>
<td>
<a href="http://icodekorea.com/res/join_company_fix_a.php?sellid=sir2" target="_blank" class="btn_frmline">아이코드 회원가입</a>
</td>
</tr>
<?php if ($userinfo['payment'] == 'A') { ?>
<tr>
<th scope="row">충전 잔액</th>
<?php if ($userinfo['payment'] == 'A') { ?>
<tr class="icode_old_version">
<th scope="row">충전 잔액<br>(구버전)</th>
<td>
<?php echo number_format($userinfo['coin']); ?> 원.
<a href="http://www.icodekorea.com/smsbiz/credit_card_amt.php?icode_id=<?php echo $config['cf_icode_id']; ?>&amp;icode_passwd=<?php echo $config['cf_icode_pw']; ?>" target="_blank" class="btn_frmline">충전하기</a>
</td>
</tr>
<?php } ?>
<tr class="icode_json_version">
<th scope="row"><label for="cf_icode_token_key">아이코드 토큰키<br>(JSON버전)</label></th>
<td>
<?php echo help("아이코드 JSON 버전의 경우 아이코드 토큰키를 입력시 실행됩니다.<br>SMS 전송유형을 LMS로 설정시 90바이트 이내는 SMS, 90 ~ 2000 바이트는 LMS 그 이상은 절삭 되어 LMS로 발송됩니다."); ?>
<input type="text" name="cf_icode_token_key" value="<?php echo $config['cf_icode_token_key']; ?>" id="cf_icode_token_key" class="frm_input" size="40">
<?php echo help("아이코드 사이트 -> 토큰키관리 메뉴에서 생성한 토큰키를 입력합니다."); ?>
<br>
서버아이피 : <?php echo $_SERVER['SERVER_ADDR']; ?>
</td>
</tr>
<tr>
<th scope="row">아이코드 SMS 신청<br>회원가입</th>
<td>
<a href="http://icodekorea.com/res/join_company_fix_a.php?sellid=sir2" target="_blank" class="btn_frmline">아이코드 회원가입</a>
</td>
</tr>
</tbody>
</table>
</div>
@@ -1449,10 +1466,14 @@ if($config['cf_cert_use']) {
// kcp일 때
if($config['cf_cert_hp'] == 'kcp') {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G5_KCPCERT_PATH . '/bin/ct_cli';
else
$exe = G5_KCPCERT_PATH . '/bin/ct_cli_x64';
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G5_KCPCERT_PATH . '/bin/ct_cli';
else
$exe = G5_KCPCERT_PATH . '/bin/ct_cli_x64';
} else {
$exe = G5_KCPCERT_PATH . '/bin/ct_cli_exe.exe';
}
echo module_exec_check($exe, 'ct_cli');
}
+4 -1
View File
@@ -26,7 +26,7 @@ if(!$_POST['cf_cert_use']) {
$cf_social_servicelist = !empty($_POST['cf_social_servicelist']) ? implode(',', $_POST['cf_social_servicelist']) : '';
$_POST['cf_title'] = strip_tags($_POST['cf_title']);
$_POST['cf_title'] = strip_tags(clean_xss_attributes($_POST['cf_title']));
$check_keys = array('cf_lg_mid', 'cf_lg_mert_key', 'cf_cert_kcb_cd', 'cf_cert_kcp_cd', 'cf_editor', 'cf_recaptcha_site_key', 'cf_recaptcha_secret_key', 'cf_naver_clientid', 'cf_naver_secret', 'cf_facebook_appid', 'cf_facebook_secret', 'cf_twitter_key', 'cf_twitter_secret', 'cf_google_clientid', 'cf_google_secret', 'cf_googl_shorturl_apikey', 'cf_kakao_rest_key', 'cf_kakao_client_secret', 'cf_kakao_js_apikey', 'cf_payco_clientid', 'cf_payco_secret');
@@ -36,6 +36,8 @@ foreach( $check_keys as $key ){
}
}
$_POST['cf_icode_server_port'] = isset($_POST['cf_icode_server_port']) ? preg_replace('/[^0-9]/', '', $_POST['cf_icode_server_port']) : '7295';
$sql = " update {$g5['config_table']}
set cf_title = '{$_POST['cf_title']}',
cf_admin = '{$_POST['cf_admin']}',
@@ -143,6 +145,7 @@ $sql = " update {$g5['config_table']}
cf_sms_type = '{$_POST['cf_sms_type']}',
cf_icode_id = '{$_POST['cf_icode_id']}',
cf_icode_pw = '{$_POST['cf_icode_pw']}',
cf_icode_token_key = '{$_POST['cf_icode_token_key']}',
cf_icode_server_ip = '{$_POST['cf_icode_server_ip']}',
cf_icode_server_port = '{$_POST['cf_icode_server_port']}',
cf_googl_shorturl_apikey = '{$_POST['cf_googl_shorturl_apikey']}',
+6 -1
View File
@@ -21,7 +21,7 @@ if ($w == "" || $w == "u")
}
$co_id = preg_replace('/[^a-z0-9_]/i', '', $co_id);
$co_subject = strip_tags($co_subject);
$co_subject = strip_tags(clean_xss_attributes($co_subject));
$co_include_head = preg_replace(array("#[\\\]+$#", "#(<\?php|<\?)#i"), "", substr($co_include_head, 0, 255));
$co_include_tail = preg_replace(array("#[\\\]+$#", "#(<\?php|<\?)#i"), "", substr($co_include_tail, 0, 255));
$co_tag_filter_use = isset($_POST['co_tag_filter_use']) ? (int) $_POST['co_tag_filter_use'] : 1;
@@ -71,6 +71,11 @@ if( $co_include_tail && ! is_include_path_check($co_include_tail, 1) ){
$error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.';
}
if( function_exists('filter_input_include_path') ){
$co_include_head = filter_input_include_path($co_include_head);
$co_include_tail = filter_input_include_path($co_include_tail);
}
$co_seo_title = exist_seo_title_recursive('content', generate_seo_title($co_subject), $g5['content_table'], $co_id);
$sql_common = " co_include_head = '$co_include_head',
+7 -1
View File
@@ -197,12 +197,14 @@ a.btn_submit{background:#ff4081;color:#fff}
.btn_frmline{display:inline-block;background:#9eacc6;color:#fff;height:35px;border:0;border-radius:5px;padding:0 10px}
a.btn_frmline{display:inline-block;background:#9eacc6;color:#fff;height:35px;line-height:33px;border-radius:5px;padding:0 10px;text-decoration:none !important}
.btn_ov01{display:inline-block;line-height:30px;height:30px;font-size:0.92em;vertical-align:top}
.btn_ov01:after{display:block;visibility:hidden;clear :both;content:""}
.btn_ov01 .ov_txt{float:left;background:#9eacc6;color:#fff;border-radius:5px 0 0 5px;padding:0 5px}
.btn_ov01 .ov_num{float:left;background:#ededed;color:#666;border-radius:0 5px 5px 0;padding:0 5px}
a.btn_ov02,a.ov_listall{display:inline-block;line-height:30px;height:30px;font-size:0.92em;background:#565e8c;color:#fff;vertical-align:top;border-radius:5px;padding:0 7px }
a.btn_ov02:hover,a.ov_listall:hover{background:#3f51b5}
.local_ov01.local_ov [data-tooltip-text]:hover {position:relative}
.local_ov01.local_ov [data-tooltip-text]:hover:after{line-height:20px;background-color:#000;background-color:rgba(0,0,0,0.8);-webkit-box-shadow:0 0 3px 1px rgba(50,50,50,0.4);-moz-box-shadow:0 0 3px 1px rgba(50,50,50,0.4);box-shadow:0 0 3px 1px rgba(50,50,50,0.4);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;color:#FFF;font-size:11px;content:attr(data-tooltip-text);white-space: pre;margin-bottom:10px;top:130%;left:0;padding:7px 12px;position:absolute;max-width:500px;word-wrap:break-word;z-index:9999}
/*form*/
.sound_only {display:inline-block !important;position:absolute;top:0;left:0;margin:0 !important;padding:0 !important;width:1px !important;height:1px !important;font-size:0;line-height:0;border:0 !important;overflow:hidden !important}
.frm_input{height:35px;line-height:32px;border:1px solid #d5d5d5;}
@@ -528,6 +530,10 @@ td.td_grpset {width:160px;border-left:1px solid #e9ecee;text-align:center}
.is_rewrite .info-success{color:#155724}
.is_rewrite .info-warning{color:#856404}
.icode_old_version th{background-color:#FFFCED}
.icode_json_version th{background-color:#F6F1FF}
.cf_tr_hide {display:none}
/* 관리권한설정 */
#add_admin fieldset {margin-top:20px;overflow:auto;padding:2px 6px;line-height:1.4;resize:vertical}
+16
View File
@@ -147,6 +147,22 @@ if(!isset($member['mb_memo_cnt'])) {
$is_check = true;
}
// 스크랩 읽은 수 추가
if(!isset($member['mb_scrap_cnt'])) {
sql_query(" ALTER TABLE `{$g5['member_table']}`
ADD `mb_scrap_cnt` int(11) NOT NULL DEFAULT '0' AFTER `mb_memo_cnt`", true);
$is_check = true;
}
// 짧은 URL 주소를 사용 여부 필드 추가
if (!isset($config['cf_bbs_rewrite'])) {
sql_query(" ALTER TABLE `{$g5['config_table']}`
ADD `cf_bbs_rewrite` tinyint(4) NOT NULL DEFAULT '0' AFTER `cf_link_target` ", true);
$is_check = true;
}
// 파일테이블에 추가 칼럼
$sql = " SHOW COLUMNS FROM `{$g5['board_file_table']}` LIKE 'bf_fileurl' ";
+5 -3
View File
@@ -68,15 +68,17 @@ $result = sql_query($sql);
$num = $i + 1;
$bg = 'bg'.($i%2);
$fa_subject = conv_content($row['fa_subject'], 1);
?>
<tr class="<?php echo $bg; ?>">
<td class="td_num"><?php echo $num; ?></td>
<td class="td_left"><?php echo stripslashes($row['fa_subject']); ?></td>
<td class="td_left"><?php echo $fa_subject; ?></td>
<td class="td_num"><?php echo $row['fa_order']; ?></td>
<td class="td_mng td_mng_m">
<a href="./faqform.php?w=u&amp;fm_id=<?php echo $row['fm_id']; ?>&amp;fa_id=<?php echo $row['fa_id']; ?>" class="btn btn_03"><span class="sound_only"><?php echo stripslashes($row['fa_subject']); ?> </span>수정</a>
<a href="./faqformupdate.php?w=d&amp;fm_id=<?php echo $row['fm_id']; ?>&amp;fa_id=<?php echo $row['fa_id']; ?>" onclick="return delete_confirm(this);" class="btn btn_02"><span class="sound_only"><?php echo stripslashes($row['fa_subject']); ?> </span>삭제</a>
<a href="./faqform.php?w=u&amp;fm_id=<?php echo $row['fm_id']; ?>&amp;fa_id=<?php echo $row['fa_id']; ?>" class="btn btn_03"><span class="sound_only"><?php echo $fa_subject; ?> </span>수정</a>
<a href="./faqformupdate.php?w=d&amp;fm_id=<?php echo $row['fm_id']; ?>&amp;fa_id=<?php echo $row['fa_id']; ?>" onclick="return delete_confirm(this);" class="btn btn_02"><span class="sound_only"><?php echo $fa_subject; ?> </span>삭제</a>
</td>
</tr>
+1 -1
View File
@@ -18,7 +18,7 @@ check_admin_token();
if ($fm_himg_del) @unlink(G5_DATA_PATH."/faq/{$fm_id}_h");
if ($fm_timg_del) @unlink(G5_DATA_PATH."/faq/{$fm_id}_t");
$fm_subject = strip_tags($fm_subject);
$fm_subject = strip_tags(clean_xss_attributes($fm_subject));
$sql_common = " set fm_subject = '$fm_subject',
fm_head_html = '$fm_head_html',
+1 -1
View File
@@ -42,7 +42,7 @@ include_once('./admin.head.php');
<tbody>
<tr>
<th scope="row"><label for="ma_subject">메일 제목<strong class="sound_only">필수</strong></label></th>
<td><input type="text" name="ma_subject" value="<?php echo $ma['ma_subject'] ?>" id="ma_subject" required class="required frm_input" size="100"></td>
<td><input type="text" name="ma_subject" value="<?php echo get_sanitize_input($ma['ma_subject']); ?>" id="ma_subject" required class="required frm_input" size="100"></td>
</tr>
<tr>
<th scope="row"><label for="ma_content">메일 내용<strong class="sound_only">필수</strong></label></th>
+1 -1
View File
@@ -10,7 +10,7 @@ auth_check($auth[$sub_menu], 'w');
check_admin_token();
$ma_id = isset($_POST['ma_id']) ? (int) $_POST['ma_id'] : 0;
$ma_subject = isset($_POST['ma_subject']) ? strip_tags($_POST['ma_subject']) : '';
$ma_subject = isset($_POST['ma_subject']) ? strip_tags(clean_xss_attributes($_POST['ma_subject'])) : '';
if ($w == '')
{
+2 -2
View File
@@ -70,8 +70,8 @@ $colspan = 16;
<div class="local_ov01 local_ov">
<?php echo $listall ?>
<span class="btn_ov01"><span class="ov_txt">총회원수 </span><span class="ov_num"> <?php echo number_format($total_count) ?>명 </span></span>
<a href="?sst=mb_intercept_date&amp;sod=desc&amp;sfl=<?php echo $sfl ?>&amp;stx=<?php echo $stx ?>" class="btn_ov01"> <span class="ov_txt">차단 </span><span class="ov_num"><?php echo number_format($intercept_count) ?>명</span></a>
<a href="?sst=mb_leave_date&amp;sod=desc&amp;sfl=<?php echo $sfl ?>&amp;stx=<?php echo $stx ?>" class="btn_ov01"> <span class="ov_txt">탈퇴 </span><span class="ov_num"><?php echo number_format($leave_count) ?>명</span></a>
<a href="?sst=mb_intercept_date&amp;sod=desc&amp;sfl=<?php echo $sfl ?>&amp;stx=<?php echo $stx ?>" class="btn_ov01" data-tooltip-text="차단된 순으로 정렬합니다.&#xa;전체 데이터를 출력합니다."> <span class="ov_txt">차단 </span><span class="ov_num"><?php echo number_format($intercept_count) ?>명</span></a>
<a href="?sst=mb_leave_date&amp;sod=desc&amp;sfl=<?php echo $sfl ?>&amp;stx=<?php echo $stx ?>" class="btn_ov01" data-tooltip-text="탈퇴된 순으로 정렬합니다.&#xa;전체 데이터를 출력합니다."> <span class="ov_txt">탈퇴 </span><span class="ov_num"><?php echo number_format($leave_count) ?>명</span></a>
</div>
<form id="fsearch" name="fsearch" class="local_sch01 local_sch" method="get">
+3 -3
View File
@@ -159,11 +159,11 @@ function add_menu_list(name, link, code)
list += "<option value=\"0\">사용안함</option>";
list += "</select>";
list += "</td>";
list += "<td class=\"td_mngsmall\">";
list += "<td class=\"td_mng\">";
<?php if($new == 'new') { ?>
list += "<button type=\"button\" class=\"btn_add_submenu btn\">추가</button>";
list += "<button type=\"button\" class=\"btn_add_submenu btn_03\">추가</button>\n";
<?php } ?>
list += "<button type=\"button\" class=\"btn_del_menu btn\">삭제</button>";
list += "<button type=\"button\" class=\"btn_del_menu btn_02\">삭제</button>";
list += "</td>";
list += "</tr>";
+2 -2
View File
@@ -21,11 +21,11 @@ for ($i=0; $i<$count; $i++)
{
$_POST = array_map_deep('trim', $_POST);
$_POST['me_link'][$i] = is_array($_POST['me_link']) ? clean_xss_tags($_POST['me_link'][$i], 1) : '';
$_POST['me_link'][$i] = is_array($_POST['me_link']) ? clean_xss_tags(clean_xss_attributes($_POST['me_link'][$i], 1)) : '';
$code = is_array($_POST['code']) ? strip_tags($_POST['code'][$i]) : '';
$me_name = is_array($_POST['me_name']) ? strip_tags($_POST['me_name'][$i]) : '';
$me_link = (preg_match('/^javascript/i', $_POST['me_link'][$i]) || preg_match('/script:/i', $_POST['me_link'][$i])) ? G5_URL : strip_tags($_POST['me_link'][$i]);
$me_link = (preg_match('/^javascript/i', $_POST['me_link'][$i]) || preg_match('/script:/i', $_POST['me_link'][$i])) ? G5_URL : strip_tags(clean_xss_attributes($_POST['me_link'][$i]));
if(!$code || !$me_name || !$me_link)
continue;
+1 -1
View File
@@ -12,7 +12,7 @@ else
check_admin_token();
$nw_subject = isset($_POST['nw_subject']) ? strip_tags($_POST['nw_subject']) : '';
$nw_subject = isset($_POST['nw_subject']) ? strip_tags(clean_xss_attributes($_POST['nw_subject'])) : '';
$sql_common = " nw_device = '{$_POST['nw_device']}',
nw_begin_time = '{$_POST['nw_begin_time']}',
+3 -3
View File
@@ -6,9 +6,9 @@ auth_check($auth[$sub_menu], 'w');
check_admin_token();
$mb_id = strip_tags($_POST['mb_id']);
$po_point = strip_tags($_POST['po_point']);
$po_content = strip_tags($_POST['po_content']);
$mb_id = strip_tags(clean_xss_attributes($_POST['mb_id']));
$po_point = strip_tags(clean_xss_attributes($_POST['po_point']));
$po_content = strip_tags(clean_xss_attributes($_POST['po_content']));
$expire = preg_replace('/[^0-9]/', '', $_POST['po_expire_term']);
$mb = get_member($mb_id);
+1 -1
View File
@@ -37,7 +37,7 @@ include_once('./admin.head.php');
<tbody>
<tr>
<th scope="row"><label for="po_subject">투표 제목<strong class="sound_only">필수</strong></label></th>
<td><input type="text" name="po_subject" value="<?php echo $po['po_subject'] ?>" id="po_subject" required class="required frm_input" size="80" maxlength="125"></td>
<td><input type="text" name="po_subject" value="<?php echo get_sanitize_input($po['po_subject']); ?>" id="po_subject" required class="required frm_input" size="80" maxlength="125"></td>
</tr>
<?php
+1 -1
View File
@@ -40,7 +40,7 @@ foreach( $_POST as $key=>$value ){
if( empty($value) ) continue;
if( in_array($key, $check_keys) ) {
$_POST[$key] = strip_tags($value);
$_POST[$key] = strip_tags(clean_xss_attributes($value));
}
}
+5 -5
View File
@@ -133,7 +133,7 @@ if(!isset($qaconfig['qa_include_head'])) {
<tr>
<th scope="row"><label for="qa_title">타이틀<strong class="sound_only">필수</strong></label></th>
<td>
<input type="text" name="qa_title" value="<?php echo $qaconfig['qa_title'] ?>" id="qa_title" required class="required frm_input" size="40">
<input type="text" name="qa_title" value="<?php echo get_sanitize_input($qaconfig['qa_title']); ?>" id="qa_title" required class="required frm_input" size="40">
<a href="<?php echo G5_BBS_URL; ?>/qalist.php" class="btn_frmline">1:1문의 바로가기</a>
</td>
</tr>
@@ -141,7 +141,7 @@ if(!isset($qaconfig['qa_include_head'])) {
<th scope="row"><label for="qa_category">분류<strong class="sound_only">필수</strong></label></th>
<td>
<?php echo help('분류와 분류 사이는 | 로 구분하세요. (예: 질문|답변) 첫자로 #은 입력하지 마세요. (예: #질문|#답변 [X])') ?>
<input type="text" name="qa_category" value="<?php echo $qaconfig['qa_category'] ?>" id="qa_category" required class="required frm_input" size="70">
<input type="text" name="qa_category" value="<?php echo get_sanitize_input($qaconfig['qa_category']); ?>" id="qa_category" required class="required frm_input" size="70">
</td>
</tr>
<tr>
@@ -184,21 +184,21 @@ if(!isset($qaconfig['qa_include_head'])) {
<th scope="row"><label for="qa_send_number">SMS 발신번호</label></th>
<td>
<?php echo help('SMS 알림 전송시 발신번호로 사용됩니다.'); ?>
<input type="text" name="qa_send_number" value="<?php echo $qaconfig['qa_send_number'] ?>" id="qa_send_number" class="frm_input" size="30">
<input type="text" name="qa_send_number" value="<?php echo get_sanitize_input($qaconfig['qa_send_number']); ?>" id="qa_send_number" class="frm_input" size="30">
</td>
</tr>
<tr>
<th scope="row"><label for="qa_admin_hp">관리자 휴대폰번호</label></th>
<td>
<?php echo help('관리자 휴대폰번호를 입력하시면 문의글 등록시 등록하신 번호로 SMS 알림이 전송됩니다.<br>SMS 알림을 사용하지 않으시면 알림이 전송되지 않습니다.'); ?>
<input type="text" name="qa_admin_hp" value="<?php echo $qaconfig['qa_admin_hp'] ?>" id="qa_admin_hp" class="frm_input" size="30">
<input type="text" name="qa_admin_hp" value="<?php echo get_sanitize_input($qaconfig['qa_admin_hp']); ?>" id="qa_admin_hp" class="frm_input" size="30">
</td>
</tr>
<tr>
<th scope="row"><label for="qa_admin_email">관리자 이메일</label></th>
<td>
<?php echo help('관리자 이메일을 입력하시면 문의글 등록시 등록하신 이메일로 알림이 전송됩니다.'); ?>
<input type="text" name="qa_admin_email" value="<?php echo $qaconfig['qa_admin_email'] ?>" id="qa_admin_email" class="frm_input" size="50">
<input type="text" name="qa_admin_email" value="<?php echo get_sanitize_input($qaconfig['qa_admin_email']); ?>" id="qa_admin_email" class="frm_input" size="50">
</td>
</tr>
<tr>
+10 -1
View File
@@ -12,6 +12,12 @@ $error_msg = '';
$qaconfig = get_qa_config();
$check_keys = array('qa_title', 'qa_category', 'qa_skin', 'qa_mobile_skin', 'qa_use_email', 'qa_req_email', 'qa_use_hp', 'qa_req_hp', 'qa_use_sms', 'qa_send_number', 'qa_admin_hp', 'qa_admin_email', 'qa_subject_len', 'qa_mobile_subject_len', 'qa_page_rows', 'qa_mobile_page_rows', 'qa_image_width', 'qa_upload_size');
foreach($check_keys as $key){
$$key = $_POST[$key] = isset($_POST[$key]) ? strip_tags(clean_xss_attributes($_POST[$key])) : '';
}
$qa_include_head = preg_replace(array("#[\\\]+$#", "#(<\?php|<\?)#i"), "", substr($qa_include_head, 0, 255));
$qa_include_tail = preg_replace(array("#[\\\]+$#", "#(<\?php|<\?)#i"), "", substr($qa_include_tail, 0, 255));
@@ -50,7 +56,10 @@ if( $qa_include_tail && ! is_include_path_check($qa_include_tail, 1) ){
$error_msg = '/data/file/ 또는 /data/editor/ 포함된 문자를 하단 파일 경로에 포함시킬수 없습니다.';
}
$_POST['qa_title'] = strip_tags($_POST['qa_title']);
if( function_exists('filter_input_include_path') ){
$qa_include_head = filter_input_include_path($qa_include_head);
$qa_include_tail = filter_input_include_path($qa_include_tail);
}
$sql = " update {$g5['qa_config_table']}
set qa_title = '{$_POST['qa_title']}',
+38 -12
View File
@@ -9,6 +9,14 @@ $g5['title'] = "SMS 기본설정";
if (!$config['cf_icode_server_ip']) $config['cf_icode_server_ip'] = '211.172.232.124';
if (!$config['cf_icode_server_port']) $config['cf_icode_server_port'] = '7295';
// 아이코드 토큰키 추가
if( ! isset($config['cf_icode_token_key']) ){
$sql = "ALTER TABLE `{$g5['config_table']}`
ADD COLUMN `cf_icode_token_key` VARCHAR(100) NOT NULL DEFAULT '' AFTER `cf_icode_server_port`; ";
sql_query($sql, false);
$config['cf_icode_token_key'] = '';
}
if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw'])
{
$userinfo = get_icode_userinfo($config['cf_icode_id'], $config['cf_icode_pw']);
@@ -23,7 +31,7 @@ if (!$sms5['cf_skin'])
include_once(G5_ADMIN_PATH.'/admin.head.php');
?>
<?php if (!$config['cf_icode_pw']) { ?>
<?php if (!($config['cf_icode_pw'] || $config['cf_icode_token_key'])) { ?>
<div class="local_desc01 local_desc">
<p>
SMS 기능을 사용하시려면 먼저 아이코드에 서비스 신청을 하셔야 합니다.<br>
@@ -47,22 +55,31 @@ if ($config['cf_sms_use'] == 'icode') { // 아이코드 사용
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="cf_icode_id">아이코드 회원아이디<strong class="sound_only"> 필수</strong></label></th>
<th scope="row"><label for="cf_sms_type">SMS 전송유형</label></th>
<td>
<?php echo help("전송유형을 SMS로 선택하시면 최대 80바이트까지 전송하실 수 있으며<br>LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 ".G5_ICODE_LMS_MAX_LENGTH."바이트까지 LMS로 전송됩니다.<br>요금은 건당 SMS는 16원, LMS는 48원입니다."); ?>
<select id="cf_sms_type" name="cf_sms_type">
<option value="" <?php echo get_selected($config['cf_sms_type'], ''); ?>>SMS</option>
<option value="LMS" <?php echo get_selected($config['cf_sms_type'], 'LMS'); ?>>LMS</option>
</select>
</td>
</tr>
<tr class="icode_old_version">
<th scope="row"><label for="cf_icode_id">아이코드 회원아이디<br>(구버전)<strong class="sound_only"> 필수</strong></label></th>
<td>
<?php echo help("아이코드에서 사용하시는 회원아이디를 입력합니다."); ?>
<input type="text" name="cf_icode_id" value="<?php echo $config['cf_icode_id']; ?>" id="cf_icode_id" required class="frm_input required">
<input type="text" name="cf_icode_id" value="<?php echo $config['cf_icode_id']; ?>" id="cf_icode_id" class="frm_input">
</td>
</tr>
<tr>
<th scope="row"><label for="cf_icode_pw">아이코드 비밀번호<strong class="sound_only"> 필수</strong></label></th>
<tr class="icode_old_version">
<th scope="row"><label for="cf_icode_pw">아이코드 비밀번호<br>(구버전)<strong class="sound_only"> 필수</strong></label></th>
<td>
<?php echo help("아이코드에서 사용하시는 비밀번호를 입력합니다."); ?>
<input type="password" name="cf_icode_pw" value="<?php echo $config['cf_icode_pw']; ?>" id="cf_icode_pw" required class="frm_input required">
<?php if (!$config['cf_icode_pw']) { ?>현재 비밀번호가 입력되어 있지 않습니다.<?php } ?>
<input type="password" name="cf_icode_pw" value="<?php echo $config['cf_icode_pw']; ?>" id="cf_icode_pw" class="frm_input">
</td>
</tr>
<tr>
<th scope="row">요금제</th>
<tr class="icode_old_version <?php if(!(isset($userinfo['payment']) && $userinfo['payment'])){ echo 'cf_tr_hide'; } ?>">
<th scope="row">요금제<br>(구버전)</th>
<td>
<?php
if ($userinfo['payment'] == 'A') {
@@ -72,21 +89,30 @@ if ($config['cf_sms_use'] == 'icode') { // 아이코드 사용
echo '정액제';
echo '<input type="hidden" name="cf_icode_server_port" value="7296">';
} else {
echo '가입해주세요.';
echo '<input type="hidden" name="cf_icode_server_port" value="7295">';
}
?>
</td>
</tr>
<?php if ($userinfo['payment'] == 'A') { ?>
<tr>
<th scope="row">충전 잔액</th>
<tr class="icode_old_version">
<th scope="row">충전 잔액<br>(구버전)</th>
<td>
<?php echo number_format($userinfo['coin'])?> 원
<a href="http://www.icodekorea.com/smsbiz/credit_card_amt.php?icode_id=<?php echo $config['cf_icode_id']; ?>&amp;icode_passwd=<?php echo $config['cf_icode_pw']; ?>" target="_blank" class="btn_frmline">충전하기</a>
</td>
</tr>
<?php } ?>
<tr class="icode_json_version">
<th scope="row"><label for="cf_icode_token_key">아이코드 토큰키<br>(JSON버전)</label></th>
<td>
<?php echo help("아이코드 JSON 버전의 경우 아이코드 토큰키를 입력시 실행됩니다.<br>SMS 전송유형을 LMS로 설정시 90바이트 이내는 SMS, 90 ~ 2000 바이트는 LMS 그 이상은 절삭 되어 LMS로 발송됩니다."); ?>
<input type="text" name="cf_icode_token_key" value="<?php echo $config['cf_icode_token_key']; ?>" id="cf_icode_token_key" class="frm_input" size="40">
<?php echo help("아이코드 사이트 -> 토큰키관리 메뉴에서 생성한 토큰키를 입력합니다."); ?>
<br>
서버아이피 : <?php echo $_SERVER['SERVER_ADDR']; ?>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_phone">회신번호<strong class="sound_only"> 필수</strong></label></th>
<td>
+4 -1
View File
@@ -15,6 +15,7 @@ if(!check_vaild_callback($cf_phone))
alert('회신번호가 올바르지 않습니다.');
$userinfo = get_icode_userinfo($cf_icode_id, $cf_icode_pw);
$cf_icode_server_port = isset($cf_icode_server_port) ? preg_replace('/[^0-9]/', '', $cf_icode_server_port) : '7295';
if ($userinfo['code'] == '202')
alert('아이코드 아이디와 패스워드가 맞지 않습니다.');
@@ -33,10 +34,12 @@ sql_query($sql);
// 아이코드 설정
$sql = " update {$g5['config_table']}
set cf_sms_use = '$cf_sms_use',
cf_sms_type = '$cf_sms_type',
cf_icode_id = '$cf_icode_id',
cf_icode_pw = '$cf_icode_pw',
cf_icode_server_ip = '$cf_icode_server_ip',
cf_icode_server_port = '$cf_icode_server_port' ";
cf_icode_server_port = '$cf_icode_server_port',
cf_icode_token_key = '$cf_icode_token_key'";
sql_query($sql);
goto_url("./config.php");
+1
View File
@@ -22,6 +22,7 @@
.sms5_box {position:relative;padding:10px;border-radius:5px;background:#fbec99}
.sms5_box .box_ico {position:absolute;top:20px;left:-7px;width:7px;height:13px;background:url('../img/box_ico.gif') no-repeat}
.sms5_box .box_txt {border:0;background:transparent;word-break:break-all;resize:none;overflow:hidden}
.sms5_box textarea.box_txt.is_overview{overflow:visible;min-height:130px}
.sms5_box .box_square {width:100px;height:90px}
#write_wrap {z-index:9}
+2 -2
View File
@@ -4,8 +4,8 @@ include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$fo_name = isset($fo_name) ? strip_tags($fo_name) : '';
$fo_content = isset($fo_content) ? strip_tags($fo_content) : '';
$fo_name = isset($fo_name) ? strip_tags(clean_xss_attributes($fo_name)) : '';
$fo_content = isset($fo_content) ? strip_tags(clean_xss_attributes($fo_content)) : '';
$g5['title'] = "이모티콘 업데이트";
+3 -1
View File
@@ -6,6 +6,8 @@ auth_check($auth[$sub_menu], "w");
$g5['title'] = "이모티콘 ";
$fg_no = isset($fg_no) ? (int) $fg_no : '';
if ($w == 'u' && is_numeric($fo_no)) {
$write = sql_fetch("select * from {$g5['sms5_form_table']} where fo_no='$fo_no'");
$g5['title'] .= '수정';
@@ -48,7 +50,7 @@ include_once(G5_ADMIN_PATH.'/admin.head.php');
</tr>
<tr>
<th scope="row"><label for="fo_name">제목<strong class="sound_only"> 필수</strong></label></th>
<td><input type="text" name="fo_name" id="fo_name" required value="<?php echo $write['fo_name']?>" class="frm_input required" size="70"></td>
<td><input type="text" name="fo_name" id="fo_name" required value="<?php echo get_sanitize_input($write['fo_name']); ?>" class="frm_input required" size="70"></td>
</tr>
<tr>
<th scope="row">메세지</th>
+2 -2
View File
@@ -224,8 +224,8 @@ if($config['cf_sms_type'] == 'LMS') {
?>
<script>
act = window.open('sms_ing.php', 'act', 'width=300, height=200');
act.close();
//act = window.open('sms_ing.php', 'act', 'width=300, height=200');
//act.close();
location.href = 'history_view.php?wr_no=<?php echo $wr_no?>&wr_renum=<?php echo $new_wr_renum?>';
</script>
<?php
+4 -3
View File
@@ -4,6 +4,7 @@ include_once("./_common.php");
$spage_size = 20;
$colspan = 10;
$re_text = '';
$st = isset($st) ? strip_tags($st) : '';
$ssv = isset($ssv) ? strip_tags($ssv) : '';
@@ -60,8 +61,8 @@ function re_send()
if (!confirm('전송에 실패한 SMS 를 재전송 하시겠습니까?'))
return;
act = window.open('sms_ing.php', 'act', 'width=300, height=200');
act.focus();
//act = window.open('sms_ing.php', 'act', 'width=300, height=200');
//act.focus();
location.href = './history_send.php?w=f&page=<?php echo $page?>&st=<?php echo $st?>&sv=<?php echo $sv?>&wr_no=<?php echo $wr_no?>&wr_renum=<?php echo $wr_renum?>';
<?php } ?>
@@ -104,7 +105,7 @@ function all_send()
<div id="con_sms" class="sms5_box">
<span class="box_ico"></span>
<textarea class="box_txt" readonly><?php echo $write['wr_message'];?></textarea>
<textarea class="box_txt is_overview" readonly><?php echo $write['wr_message'];?></textarea>
</div>
<?php if ($write['wr_re_total'] && !$wr_renum) { ?>
+1
View File
@@ -53,6 +53,7 @@ eval("\$file = \"$file\";");
$f = explode(";", $file);
for ($i=0; $i<count($f); $i++) {
if (trim($f[$i]) == "") continue;
$f[$i] = get_db_create_replace($f[$i]);
sql_query($f[$i]) or die(mysqli_error());
}
// 테이블 생성 ------------------------------------
+6 -4
View File
@@ -13,10 +13,12 @@ $g5['title'] = "휴대폰번호 관리";
if ($page < 1) $page = 1;
$bg_no = isset($bg_no) ? (int) $bg_no : 0;
$bg_no = isset($bg_no) ? preg_replace('/[^0-9]/i', '', $bg_no) : '';
$st = isset($st) ? preg_replace('/[^a-z0-9]/i', '', $st) : '';
if (is_numeric($bg_no))
$sql_korean = $sql_group = $sql_search = $sql_no_hp = '';
if (is_numeric($bg_no) && $bg_no)
$sql_group = " and bg_no='$bg_no' ";
else
$sql_group = "";
@@ -127,9 +129,9 @@ function no_hp_click(val)
<label for="bg_no" class="sound_only">그룹명</label>
<select name="bg_no" id="bg_no" onchange="location.href='<?php echo $_SERVER['SCRIPT_NAME']?>?bg_no='+this.value;">
<option value=""<?php echo get_selected('', $bg_no); ?>> 전체 </option>
<option value="<?php echo $no_group['bg_no']?>"<?php echo get_selected($bg_no, $no_group['bg_no']); ?>> <?php echo $no_group['bg_name']?> (<?php echo number_format($no_group['bg_count'])?> 명) </option>
<option value="<?php echo $no_group['bg_no']?>"<?php echo get_selected($no_group['bg_no'], $bg_no); ?>> <?php echo $no_group['bg_name']?> (<?php echo number_format($no_group['bg_count'])?> 명) </option>
<?php for($i=0; $i<count($group); $i++) {?>
<option value="<?php echo $group[$i]['bg_no']?>"<?php echo get_selected($bg_no, $group[$i]['bg_no']);?>> <?php echo $group[$i]['bg_name']?> (<?php echo number_format($group[$i]['bg_count'])?> 명) </option>
<option value="<?php echo $group[$i]['bg_no']?>"<?php echo get_selected($group[$i]['bg_no'], $bg_no);?>> <?php echo $group[$i]['bg_name']?> (<?php echo number_format($group[$i]['bg_count'])?> 명) </option>
<?php } ?>
</select>
<input type="checkbox" name="no_hp" id="no_hp" <?php echo $no_hp_checked?> onclick="no_hp_click(this.checked)">
+2 -2
View File
@@ -129,7 +129,7 @@ function num_group_submit(f)
<select name="select_bg_no_999" id="select_bg_no_999" onchange="move(<?php echo $no_group['bg_no']?>, '<?php echo $no_group['bg_name']?>', this);" >
<option value=""></option>
<?php for ($i=0; $i<count($group); $i++) { ?>
<option value="<?php echo $group[$i]['bg_no']?>"> <?php echo $group[$i]['bg_name']?> </option>
<option value="<?php echo $group[$i]['bg_no']?>"> <?php echo get_sanitize_input($group[$i]['bg_name']); ?> </option>
<?php } ?>
</select>
</td>
@@ -150,7 +150,7 @@ function num_group_submit(f)
</td>
<td>
<label for="bg_name_<?php echo $i; ?>" class="sound_only">그룹명</label>
<input type="text" name="bg_name[<?php echo $i; ?>]" value="<?php echo $group[$i]['bg_name']?>" id="bg_name_<?php echo $i; ?>" class="frm_input">
<input type="text" name="bg_name[<?php echo $i; ?>]" value="<?php echo get_sanitize_input($group[$i]['bg_name']); ?>" id="bg_name_<?php echo $i; ?>" class="frm_input">
</td>
<td class="td_num"><?php echo number_format($group[$i]['bg_count'])?></td>
<td class="td_num"><?php echo number_format($group[$i]['bg_member'])?></td>
+5 -5
View File
@@ -11,7 +11,7 @@ if ($w == 'u') // 업데이트
// 실제 번호를 넘김
$k = $_POST['chk'][$i];
$bg_no = (int) $_POST['bg_no'][$k];
$bg_name = strip_tags($_POST['bg_name'][$k]);
$bg_name = strip_tags(clean_xss_attributes($_POST['bg_name'][$k]));
if (!is_numeric($bg_no))
alert('그룹 고유번호가 없습니다.');
@@ -23,11 +23,11 @@ if ($w == 'u') // 업데이트
if (!strlen(trim($bg_name)))
alert('그룹명을 입력해주세요');
$res = sql_fetch("select bg_name from {$g5['sms5_book_group_table']} where bg_no<>'$bg_no' and bg_name='$bg_name'");
$res = sql_fetch("select bg_name from {$g5['sms5_book_group_table']} where bg_no<>'$bg_no' and bg_name='".sql_real_escape_string($bg_name)."'");
if ($res)
alert('같은 그룹명이 존재합니다.');
sql_query("update {$g5['sms5_book_group_table']} set bg_name='".addslashes($bg_name)."' where bg_no='$bg_no'");
sql_query("update {$g5['sms5_book_group_table']} set bg_name='".sql_real_escape_string($bg_name)."' where bg_no='$bg_no'");
}
}
else if ($w == 'de') // 그룹삭제
@@ -63,7 +63,7 @@ else if ($w == 'em') // 비우기
}
else // 등록
{
$bg_name = strip_tags($bg_name);
$bg_name = strip_tags(clean_xss_attributes($bg_name));
if (!strlen(trim($bg_name)))
alert('그룹명을 입력해주세요');
@@ -72,7 +72,7 @@ else // 등록
if ($res)
alert('같은 그룹명이 존재합니다.');
sql_query("insert into {$g5['sms5_book_group_table']} set bg_name='".addslashes($bg_name)."'");
sql_query("insert into {$g5['sms5_book_group_table']} set bg_name='$bg_name'");
}
goto_url('./num_group.php');
+1 -1
View File
@@ -149,7 +149,7 @@ CREATE TABLE `{$g5['sms5_write_table']}` (
`wr_no` int(11) NOT NULL default '1',
`wr_renum` int(11) NOT NULL default '0',
`wr_reply` varchar(255) NOT NULL default '',
`wr_message` varchar(255) NOT NULL default '',
`wr_message` text NOT NULL,
`wr_booking` datetime NOT NULL default '0000-00-00 00:00:00',
`wr_total` int(11) NOT NULL default '0',
`wr_re_total` int(11) NOT NULL default '0',
+8 -7
View File
@@ -266,8 +266,8 @@ function sms5_chk_send(f)
w = document.body.clientWidth/2 - 200;
h = document.body.clientHeight/2 - 100;
act = window.open('sms_ing.php', 'act', 'width=300, height=200, left=' + w + ', top=' + h);
act.focus();
//act = window.open('sms_ing.php', 'act', 'width=300, height=200, left=' + w + ', top=' + h);
//act.focus();
f.send_list.value = list;
return true;
@@ -407,6 +407,7 @@ function byte_check(wr_message, sms_bytes)
var conts = document.getElementById(wr_message);
var bytes = document.getElementById(sms_bytes);
var max_bytes = document.getElementById("sms_max_bytes");
var lms_max_length = <?php echo G5_ICODE_LMS_MAX_LENGTH;?>
var i = 0;
var cnt = 0;
@@ -427,14 +428,14 @@ function byte_check(wr_message, sms_bytes)
<?php if($config['cf_sms_type'] == 'LMS') { ?>
if(cnt > 90)
max_bytes.innerHTML = 1500;
max_bytes.innerHTML = lms_max_length;
else
max_bytes.innerHTML = 90;
if (cnt > 1500)
if (cnt > lms_max_length)
{
exceed = cnt - 1500;
alert('메시지 내용은 1500바이트를 넘을수 없습니다.\n\n작성하신 메세지 내용은 '+ exceed +'byte가 초과되었습니다.\n\n초과된 부분은 자동으로 삭제됩니다.');
exceed = cnt - lms_max_length;
alert('메시지 내용은 '+ lms_max_length +'바이트를 넘을수 없습니다.\n\n작성하신 메세지 내용은 '+ exceed +'byte가 초과되었습니다.\n\n초과된 부분은 자동으로 삭제됩니다.');
var tcnt = 0;
var xcnt = 0;
var tmp = conts.value;
@@ -447,7 +448,7 @@ function byte_check(wr_message, sms_bytes)
tcnt += 1;
}
if (tcnt > 1500) {
if (tcnt > lms_max_length) {
tmp = tmp.substring(0,i);
break;
} else {
+2
View File
@@ -7,6 +7,8 @@ while ($res = sql_fetch_array($qry)) array_push($group, $res);
$res = sql_fetch("select count(*) as cnt from `{$g5['sms5_form_table']}` where fg_no=0");
$no_count = $res['cnt'];
$fg_no = isset($fg_no) ? (int) $fg_no : '';
?>
<form name="emo_frm">
+37 -19
View File
@@ -6,8 +6,24 @@ auth_check($auth[$sub_menu], "w");
check_admin_token();
$result = sql_query("describe `{$g5['sms5_write_table']}`");
while ($row = sql_fetch_array($result)){
if( $row['Field'] === 'wr_message' && $row['Type'] === 'varchar(255)' ){
sql_query("ALTER TABLE `{$g5['sms5_write_table']}` MODIFY wr_message TEXT NOT NULL;", false);
break;
}
}
$g5['title'] = "문자전송중";
if ($config['cf_sms_use'] != 'icode') {
alert('기본환경설정에서 icode sms 사용이 비활성화 되어 있습니다.');
}
if ( ! (($config['cf_icode_id'] && $config['cf_icode_pw']) || $config['cf_icode_token_key']) ) {
alert('아이코드 설정값이 존재하지 않습니다.');
}
$wr_reply = preg_replace('#[^0-9\-]#', '', trim($wr_reply));
$wr_message = clean_xss_tags(trim($wr_message));
@@ -94,12 +110,12 @@ while ($row = array_shift($send_list))
$hp = get_hp($item[$i][1], 0);
$name = $item[$i][0];
if(!$hp) continue;
if(!$hp) continue 2;
if ($wr_overlap && array_overlap($hps, $hp)) {
$overlap++;
array_push( $duplicate_data['hp'], $row['bk_hp'] );
continue;
continue 2;
}
array_push($list, array('bk_hp' => $hp, 'bk_name' => $name));
@@ -111,12 +127,12 @@ while ($row = array_shift($send_list))
$row = sql_fetch("select * from {$g5['sms5_book_table']} where bk_no='$item[$i]'");
$row['bk_hp'] = get_hp($row['bk_hp'], 0);
if(!$row['bk_hp']) continue;
if(!$row['bk_hp']) continue 2;
if ($wr_overlap && array_overlap($hps, $row['bk_hp'])) {
$overlap++;
array_push( $duplicate_data['hp'], $row['bk_hp'] );
continue;
continue 2;
}
array_push($list, $row);
array_push($hps, $row['bk_hp']);
@@ -141,14 +157,11 @@ if ($wr_by && $wr_bm && $wr_bd && $wr_bh && $wr_bi) {
$booking = '';
}
if ($config['cf_sms_use'] != 'icode') {
alert('기본환경설정에서 icode sms 사용이 비활성화 되어 있습니다.');
}
include_once(G5_ADMIN_PATH.'/admin.head.php');
$reply = str_replace('-', '', trim($wr_reply));
$wr_message = conv_unescape_nl($wr_message);
$db_wr_message = conv_unescape_nl($wr_message);
$wr_message = conv_unescape_nl(stripslashes($wr_message));
$SMS = new SMS5;
@@ -186,7 +199,7 @@ if($config['cf_sms_type'] == 'LMS') {
if($result) {
$result = $SMS->Send();
if ($result) //SMS 서버에 접속했습니다.
{
foreach ($SMS->Result as $result)
@@ -242,7 +255,7 @@ if($config['cf_sms_type'] == 'LMS') {
}
}
sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$wr_message', wr_success='$wr_success', wr_failure='$wr_failure', wr_memo='$str_serialize', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'");
sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$db_wr_message', wr_success='$wr_success', wr_failure='$wr_failure', wr_memo='$str_serialize', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'");
}
} else {
$SMS->SMS_con($config['cf_icode_server_ip'], $config['cf_icode_id'], $config['cf_icode_pw'], $config['cf_icode_server_port']);
@@ -260,7 +273,7 @@ if($config['cf_sms_type'] == 'LMS') {
else
$wr_no = 1;
sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$wr_message', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'");
sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$db_wr_message', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'");
$wr_success = 0;
$wr_failure = 0;
@@ -324,11 +337,16 @@ if($config['cf_sms_type'] == 'LMS') {
function win_close_alert($msg) {
$html = "<script>
act = window.open('sms_ing.php', 'act', 'width=300, height=200');
act.close();
alert('$msg');
history.back();</script>";
$html = "<script>".PHP_EOL;
//$html .= "act = window.open('sms_ing.php', 'act', 'width=300, height=200');".PHP_EOL;
//$html .= "act.close();".PHP_EOL;
$html .= "alert('$msg');
if ('referrer' in document) {
window.location = document.referrer;
} else {
window.history.back();
}
</script>";
echo $html;
exit;
@@ -336,8 +354,8 @@ function win_close_alert($msg) {
?>
<script>
act = window.open('sms_ing.php', 'act', 'width=300, height=200');
act.close();
//act = window.open('sms_ing.php', 'act', 'width=300, height=200');
//act.close();
location.href = 'history_view.php?wr_no=<?php echo $wr_no?>';
</script>
<?php
+3 -3
View File
@@ -29,7 +29,7 @@ if(!in_array($type, $arr_type)) {
}
if($type == 'board') {
$keys = array('bo_gallery_cols', 'bo_gallery_width', 'bo_gallery_height', 'bo_mobile_gallery_width', 'bo_mobile_gallery_height', 'bo_image_width');
$keys = run_replace('theme_config_load_keys', array('bo_gallery_cols', 'bo_gallery_width', 'bo_gallery_height', 'bo_mobile_gallery_width', 'bo_mobile_gallery_height', 'bo_image_width'), $type);
$tconfig = get_theme_config_value($config['cf_theme'], implode(',', $keys));
$i = 0;
@@ -43,7 +43,7 @@ if($type == 'board') {
if($i == 0)
$data['error'] = '적용할 게시판 이미지 설정이 없습니다.';
} else if($type == 'conf_skin') {
$keys = array('cf_new_skin', 'cf_mobile_new_skin', 'cf_search_skin', 'cf_mobile_search_skin', 'cf_connect_skin', 'cf_mobile_connect_skin', 'cf_faq_skin', 'cf_mobile_faq_skin');
$keys = run_replace('theme_config_load_keys', array('cf_new_skin', 'cf_mobile_new_skin', 'cf_search_skin', 'cf_mobile_search_skin', 'cf_connect_skin', 'cf_mobile_connect_skin', 'cf_faq_skin', 'cf_mobile_faq_skin'), $type);
$tconfig = get_theme_config_value($config['cf_theme'], implode(',', $keys));
@@ -58,7 +58,7 @@ if($type == 'board') {
if($i == 0)
$data['error'] = '적용할 기본환경 스킨 설정이 없습니다.';
} else if($type == 'conf_member') {
$keys = array('cf_member_skin', 'cf_mobile_member_skin');
$keys = run_replace('theme_config_load_keys', array('cf_member_skin', 'cf_mobile_member_skin'), $type);
$tconfig = get_theme_config_value($config['cf_theme'], implode(',', $keys));
+1 -1
View File
@@ -12,13 +12,13 @@ if(!in_array($theme, $theme_dir))
die('선택하신 테마가 설치되어 있지 않습니다.');
$info = get_theme_info($theme);
$name = get_text($info['theme_name']);
if($info['screenshot'])
$screenshot = '<img src="'.$info['screenshot'].'" alt="'.$name.'">';
else
$screenshot = '<img src="'.G5_ADMIN_URL.'/img/theme_img.jpg" alt="">';
$name = get_text($info['theme_name']);
if($info['theme_uri']) {
$name = '<a href="'.set_http($info['theme_uri']).'" target="_blank" class="thdt_home">'.$name.'</a>';
}
+2
View File
@@ -68,5 +68,7 @@ if($_POST['set_default_skin'] == 1) {
}
}
run_event('adm_theme_update', $theme, $_POST['set_default_skin']);
die('');
?>
+5
View File
@@ -11,6 +11,11 @@ include_once(G5_PLUGIN_PATH.'/jquery-ui/datepicker.php');
$colspan = 6;
$listall = '<a href="'.$_SERVER['SCRIPT_NAME'].'">처음</a>'; //페이지 처음으로 (초기화용도)
$sql_search = '';
if(isset($sfl) && $sfl && !in_array($sfl, array('vi_ip','vi_date','vi_time','vi_referer','vi_agent','vi_browser','vi_os','vi_device')) ) {
$sfl = '';
}
?>
<div class="local_sch local_sch01">
+1 -1
View File
@@ -53,7 +53,7 @@ if($config['cf_leave_day'] > 0) {
}
// 음성 캡챠 파일 삭제
$captcha_mp3 = glob(G5_PATH.'/data/cache/kcaptcha-*.mp3');
$captcha_mp3 = glob(G5_DATA_PATH.'/cache/kcaptcha-*.mp3');
if($captcha_mp3 && is_array($captcha_mp3)) {
foreach ($captcha_mp3 as $file) {
if (filemtime($file) + 86400 < G5_SERVER_TIME) {
+7 -5
View File
@@ -100,7 +100,8 @@ if(preg_match("/[\xA1-\xFE][\xA1-\xFE]/", $file['bf_source'])){
}
*/
$original = urlencode($file['bf_source']);
//$original = urlencode($file['bf_source']);
$original = rawurlencode($file['bf_source']);
@include_once($board_skin_path.'/download.tail.skin.php');
@@ -108,17 +109,18 @@ run_event('download_file_header', $file, $file_exist_check);
if(preg_match("/msie/i", $_SERVER['HTTP_USER_AGENT']) && preg_match("/5\.5/", $_SERVER['HTTP_USER_AGENT'])) {
header("content-type: doesn/matter");
header("content-length: ".filesize("$filepath"));
header("content-length: ".filesize($filepath));
header("content-disposition: attachment; filename=\"$original\"");
header("content-transfer-encoding: binary");
} else if (preg_match("/Firefox/i", $_SERVER['HTTP_USER_AGENT'])){
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"".basename($file['bf_source'])."\"");
header("content-length: ".filesize($filepath));
//header("content-disposition: attachment; filename=\"".basename($file['bf_source'])."\"");
header("content-disposition: attachment; filename=\"".$original."\"");
header("content-description: php generated data");
} else {
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-length: ".filesize($filepath));
header("content-disposition: attachment; filename=\"$original\"");
header("content-description: php generated data");
}
+1 -1
View File
@@ -39,7 +39,7 @@ $sql .= " order by bo_order ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
$lt_style = "";
if ($i%2==1) $lt_style = "margin-left:2%";
if ($i%3 !== 0) $lt_style = "margin-left:2%";
else $lt_style = "";
?>
<div style="float:left;<?php echo $lt_style ?>" class="lt_wr">
+1 -1
View File
@@ -20,7 +20,7 @@ run_event('memo_form_update_before', $recv_list);
for ($i=0; $i<count($recv_list); $i++) {
$row = sql_fetch(" select mb_id, mb_nick, mb_open, mb_leave_date, mb_intercept_date from {$g5['member_table']} where mb_id = '{$recv_list[$i]}' ");
if ($row) {
if ($is_admin || ($row['mb_open'] && (!$row['mb_leave_date'] || !$row['mb_intercept_date']))) {
if ($is_admin || ($row['mb_open'] && (!$row['mb_leave_date'] && !$row['mb_intercept_date']))) {
$member_list['id'][] = $row['mb_id'];
$member_list['nick'][] = $row['mb_nick'];
} else {
+6 -3
View File
@@ -31,14 +31,17 @@ else
alert($kind.' 값을 넘겨주세요.');
}
$g5['title'] = $t.' 쪽지 보기';
include_once(G5_PATH.'/head.sub.php');
$sql = " select * from {$g5['memo_table']}
where me_id = '$me_id'
and me_{$kind}_mb_id = '{$member['mb_id']}' ";
$memo = sql_fetch($sql);
set_session('ss_memo_delete_token', $token = uniqid(time()));
$del_link = 'memo_delete.php?me_id='.$memo['me_id'].'&amp;token='.$token.'&amp;kind='.$kind;
$g5['title'] = $t.' 쪽지 보기';
include_once(G5_PATH.'/head.sub.php');
// 이전 쪽지
$sql = " select me.*, a.rownum from `{$g5['memo_table']}` as me inner join ( select me_id , (@rownum:=@rownum+1) as rownum from `{$g5['memo_table']}` as memo, (select @rownum:=0) tmp where me_{$kind}_mb_id = '{$member['mb_id']}' and memo.me_type = '$kind' order by me_id desc ) as a on a.me_id = me.me_id where me.me_id < '$me_id' and me.me_{$kind}_mb_id = '{$member['mb_id']}' and me.me_type = '$kind' order by me.me_id desc limit 1 ";
+12 -2
View File
@@ -27,6 +27,8 @@ $sql = " select distinct wr_num from $write_table where wr_id in ({$wr_id_list})
$result = sql_query($sql);
while ($row = sql_fetch_array($result))
{
$save[$cnt]['wr_contents'] = array();
$wr_num = $row['wr_num'];
for ($i=0; $i<count($_POST['chk_bo_table']); $i++)
{
@@ -52,6 +54,8 @@ while ($row = sql_fetch_array($result))
$result2 = sql_query($sql2);
while ($row2 = sql_fetch_array($result2))
{
$save[$cnt]['wr_contents'][] = $row2['wr_content'];
$nick = cut_str($member['mb_nick'], $config['cf_cut_name']);
if (!$row2['wr_is_comment'] && $config['cf_use_copy_log']) {
if(strstr($row2['wr_option'], 'html')) {
@@ -192,6 +196,8 @@ while ($row = sql_fetch_array($result))
sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write + '$count_write' where bo_table = '$move_bo_table' ");
sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment + '$count_comment' where bo_table = '$move_bo_table' ");
run_event('bbs_move_copy', $row2, $move_bo_table, $insert_id, $next_wr_num, $sw);
delete_cache_latest($move_bo_table);
}
@@ -208,16 +214,20 @@ if ($sw == 'move')
{
if( isset($save[$i]['bf_file']) && $save[$i]['bf_file'] ){
for ($k=0; $k<count($save[$i]['bf_file']); $k++) {
$del_file = $save[$i]['bf_file'][$k];
$del_file = run_replace('delete_file_path', clean_relative_paths($save[$i]['bf_file'][$k]), $save[$i]);
if ( is_file($del_file) && file_exists($del_file) ){
@unlink($del_file);
}
// 썸네일 파일 삭제, 먼지손 님 코드 제안
delete_board_thumbnail($bo_table, basename($save[$i]['bf_file'][$k]));
}
}
for ($k=0; $k<count($save[$i]['wr_contents']); $k++){
delete_editor_thumbnail($save[$i]['wr_contents'][$k]);
}
sql_query(" delete from $write_table where wr_parent = '{$save[$i]['wr_id']}' ");
sql_query(" delete from {$g5['board_new_table']} where bo_table = '$bo_table' and wr_id = '{$save[$i]['wr_id']}' ");
+4
View File
@@ -3,6 +3,10 @@ include_once('./_common.php');
$g5['title'] = '비밀번호 입력';
if( isset($comment_id) ){
$comment_id = (int) $comment_id;
}
switch ($w) {
case 'u' :
$action = G5_HTTP_BBS_URL.'/write.php';
+8 -3
View File
@@ -22,21 +22,26 @@ if($is_guest) {
$filepath = G5_DATA_PATH.'/qa/'.$file['qa_file'.$no];
$filepath = addslashes($filepath);
if (!is_file($filepath) || !file_exists($filepath))
$file_exist_check = (!is_file($filepath) || !file_exists($filepath)) ? false : true;
if ( false === run_replace('qa_download_file_exist_check', $file_exist_check, $file) ){
alert('파일이 존재하지 않습니다.');
}
$g5['title'] = '다운로드 &gt; '.conv_subject($file['qa_subject'], 255);
run_event('qa_download_file_header', $file, $file_exist_check);
$original = urlencode($file['qa_source'.$no]);
if(preg_match("/msie/i", $_SERVER['HTTP_USER_AGENT']) && preg_match("/5\.5/", $_SERVER['HTTP_USER_AGENT'])) {
header("content-type: doesn/matter");
header("content-length: ".filesize("$filepath"));
header("content-length: ".filesize($filepath));
header("content-disposition: attachment; filename=\"$original\"");
header("content-transfer-encoding: binary");
} else {
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-length: ".filesize($filepath));
header("content-disposition: attachment; filename=\"$original\"");
header("content-description: php generated data");
}
+2 -1
View File
@@ -155,7 +155,8 @@ if(is_file($skin_file)) {
for ($i=1; $i<=2; $i++) {
if(preg_match("/\.({$config['cf_image_extension']})$/i", $view['qa_file'.$i])) {
$view['img_file'][] = '<a href="'.G5_BBS_URL.'/view_image.php?fn='.urlencode('/data/qa/'.$view['qa_file'.$i]).'" target="_blank" class="view_image"><img src="'.G5_DATA_URL.'/qa/'.$view['qa_file'.$i].'"></a>';
$attr_href = run_replace('thumb_view_image_href', G5_BBS_URL.'/view_image.php?fn='.urlencode('/'.G5_DATA_DIR.'/qa/'.$view['qa_file'.$i]), '/'.G5_DATA_DIR.'/qa/'.$view['qa_file'.$i], '', '', '', '');
$view['img_file'][] = '<a href="'.$attr_href.'" target="_blank" class="view_image"><img src="'.G5_DATA_URL.'/qa/'.$view['qa_file'.$i].'"></a>';
$view['img_count']++;
continue;
}
+10 -1
View File
@@ -12,10 +12,13 @@ set_session("ss_cert_no", "");
set_session("ss_cert_hash", "");
set_session("ss_cert_type", "");
$is_social_login_modify = false;
if( $provider && function_exists('social_nonce_is_valid') ){ //모바일로 소셜 연결을 했다면
if( social_nonce_is_valid(get_session("social_link_token"), $provider) ){ //토큰값이 유효한지 체크
$w = 'u'; //회원 수정으로 처리
$_POST['mb_id'] = $member['mb_id'];
$is_social_login_modify = true;
}
}
@@ -75,8 +78,14 @@ if ($w == "") {
// 수정 후 다시 이 폼으로 돌아오기 위해 임시로 저장해 놓음
set_session("ss_tmp_password", $_POST[mb_password]);
*/
if($_POST['mb_id'] && ! (isset($_POST['mb_password']) && $_POST['mb_password'])){
if( ! $is_social_login_modify ){
alert('비밀번호를 입력해 주세요.');
}
}
if ($_POST['mb_password']) {
if (isset($_POST['mb_password'])) {
// 수정된 정보를 업데이트후 되돌아 온것이라면 비밀번호가 암호화 된채로 넘어온것임
if ($_POST['is_update']) {
$tmp_password = $_POST['mb_password'];
+1 -1
View File
@@ -70,7 +70,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++) {
<item>
<title><?php echo specialchars_replace($row['wr_subject']); ?></title>
<link><?php echo specialchars_replace(get_pretty_url($bo_table, $wr_id)); ?></link>
<link><?php echo specialchars_replace(get_pretty_url($bo_table, $row['wr_id'])); ?></link>
<description><![CDATA[<?php echo $file ?><?php echo conv_content($row['wr_content'], $html) ?>]]></description>
<dc:creator><?php echo specialchars_replace($row['wr_name']) ?></dc:creator>
<?php
+4
View File
@@ -6,6 +6,10 @@ include_once(G5_PATH.'/head.sub.php');
$filename = preg_replace('/[^A-Za-z0-9 _ .\-\/]/', '', $_GET['fn']);
if(function_exists('clean_relative_paths')){
$filename = clean_relative_paths($filename);
}
$extension = pathinfo($filename, PATHINFO_EXTENSION);
if ( ! preg_match('/(jpg|jpeg|png|gif|bmp)$/i', $extension) ){
+103 -100
View File
@@ -436,7 +436,7 @@ if (!$group['gr_use_access'] && $board['bo_read_level'] < 2 && !$secret) {
// 파일개수 체크
$file_count = 0;
$upload_count = count($_FILES['bf_file']['name']);
$upload_count = (isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) ? count($_FILES['bf_file']['name']) : 0;
for ($i=0; $i<$upload_count; $i++) {
if($_FILES['bf_file']['name'][$i] && is_uploaded_file($_FILES['bf_file']['tmp_name'][$i]))
@@ -461,116 +461,119 @@ $chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));
// 가변 파일 업로드
$file_upload_msg = '';
$upload = array();
for ($i=0; $i<count($_FILES['bf_file']['name']); $i++) {
$upload[$i]['file'] = '';
$upload[$i]['source'] = '';
$upload[$i]['filesize'] = 0;
$upload[$i]['image'] = array();
$upload[$i]['image'][0] = '';
$upload[$i]['image'][1] = '';
$upload[$i]['image'][2] = '';
$upload[$i]['fileurl'] = '';
$upload[$i]['thumburl'] = '';
$upload[$i]['storage'] = '';
// 삭제에 체크가 되어있다면 파일을 삭제합니다.
if (isset($_POST['bf_file_del'][$i]) && $_POST['bf_file_del'][$i]) {
$upload[$i]['del_check'] = true;
if(isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) {
for ($i=0; $i<count($_FILES['bf_file']['name']); $i++) {
$upload[$i]['file'] = '';
$upload[$i]['source'] = '';
$upload[$i]['filesize'] = 0;
$upload[$i]['image'] = array();
$upload[$i]['image'][0] = 0;
$upload[$i]['image'][1] = 0;
$upload[$i]['image'][2] = 0;
$upload[$i]['fileurl'] = '';
$upload[$i]['thumburl'] = '';
$upload[$i]['storage'] = '';
$row = sql_fetch(" select * from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$wr_id}' and bf_no = '{$i}' ");
// 삭제에 체크가 되어있다면 파일을 삭제합니다.
if (isset($_POST['bf_file_del'][$i]) && $_POST['bf_file_del'][$i]) {
$upload[$i]['del_check'] = true;
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row['bf_file']), $row);
if( file_exists($delete_file) ){
@unlink($delete_file);
}
// 썸네일삭제
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row['bf_file'])) {
delete_board_thumbnail($bo_table, $row['bf_file']);
}
}
else
$upload[$i]['del_check'] = false;
$tmp_file = $_FILES['bf_file']['tmp_name'][$i];
$filesize = $_FILES['bf_file']['size'][$i];
$filename = $_FILES['bf_file']['name'][$i];
$filename = get_safe_filename($filename);
// 서버에 설정된 값보다 큰파일을 업로드 한다면
if ($filename) {
if ($_FILES['bf_file']['error'][$i] == 1) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량이 서버에 설정('.$upload_max_filesize.')된 값보다 크므로 업로드 할 수 없습니다.\\n';
continue;
}
else if ($_FILES['bf_file']['error'][$i] != 0) {
$file_upload_msg .= '\"'.$filename.'\" 파일이 정상적으로 업로드 되지 않았습니다.\\n';
continue;
}
}
if (is_uploaded_file($tmp_file)) {
// 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if (!$is_admin && $filesize > $board['bo_upload_size']) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($board['bo_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
continue;
}
//=================================================================\
// 090714
// 이미지나 플래시 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
$timg = @getimagesize($tmp_file);
// image type
if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename) ||
preg_match("/\.({$config['cf_flash_extension']})$/i", $filename) ) {
if ($timg['2'] < 1 || $timg['2'] > 16)
continue;
}
//=================================================================
$upload[$i]['image'] = $timg;
// 4.00.11 - 글답변에서 파일 업로드시 원글의 파일이 삭제되는 오류를 수정
if ($w == 'u') {
// 존재하는 파일이 있다면 삭제합니다.
$row = sql_fetch(" select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$i' ");
$row = sql_fetch(" select * from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$wr_id}' and bf_no = '{$i}' ");
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row['bf_file']), $row);
if( file_exists($delete_file) ){
@unlink(G5_DATA_PATH.'/file/'.$bo_table.'/'.$row['bf_file']);
@unlink($delete_file);
}
// 이미지파일이면 썸네일삭제
// 썸네일삭제
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row['bf_file'])) {
delete_board_thumbnail($bo_table, $row['bf_file']);
}
}
else
$upload[$i]['del_check'] = false;
// 프로그램 원래 파일명
$upload[$i]['source'] = $filename;
$upload[$i]['filesize'] = $filesize;
$tmp_file = $_FILES['bf_file']['tmp_name'][$i];
$filesize = $_FILES['bf_file']['size'][$i];
$filename = $_FILES['bf_file']['name'][$i];
$filename = get_safe_filename($filename);
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $filename);
// 서버에 설정된 값보다 큰파일을 업로드 한다면
if ($filename) {
if ($_FILES['bf_file']['error'][$i] == 1) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량이 서버에 설정('.$upload_max_filesize.')된 값보다 크므로 업로드 할 수 없습니다.\\n';
continue;
}
else if ($_FILES['bf_file']['error'][$i] != 0) {
$file_upload_msg .= '\"'.$filename.'\" 파일이 정상적으로 업로드 되지 않았습니다.\\n';
continue;
}
}
shuffle($chars_array);
$shuffle = implode('', $chars_array);
if (is_uploaded_file($tmp_file)) {
// 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if (!$is_admin && $filesize > $board['bo_upload_size']) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($board['bo_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
continue;
}
// 첨부파일 첨부시 첨부파일명에 공백이 포함되어 있으면 일부 PC에서 보이지 않거나 다운로드 되지 않는 현상이 있습니다. (길상여의 님 090925)
$upload[$i]['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);
//=================================================================\
// 090714
// 이미지나 플래시 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
$timg = @getimagesize($tmp_file);
// image type
if ( preg_match("/\.({$config['cf_image_extension']})$/i", $filename) ||
preg_match("/\.({$config['cf_flash_extension']})$/i", $filename) ) {
if ($timg['2'] < 1 || $timg['2'] > 16)
continue;
}
//=================================================================
$dest_file = G5_DATA_PATH.'/file/'.$bo_table.'/'.$upload[$i]['file'];
$upload[$i]['image'] = $timg;
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['bf_file']['error'][$i]);
// 4.00.11 - 글답변에서 파일 업로드시 원글의 파일이 삭제되는 오류를 수정
if ($w == 'u') {
// 존재하는 파일이 있다면 삭제합니다.
$row = sql_fetch(" select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$i' ");
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, G5_FILE_PERMISSION);
$delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row['bf_file']), $row);
if( file_exists($delete_file) ){
@unlink(G5_DATA_PATH.'/file/'.$bo_table.'/'.$row['bf_file']);
}
// 이미지파일이면 썸네일삭제
if(preg_match("/\.({$config['cf_image_extension']})$/i", $row['bf_file'])) {
delete_board_thumbnail($bo_table, $row['bf_file']);
}
}
$dest_file = run_replace('write_update_upload_file', $dest_file, $board, $wr_id, $w);
$upload[$i] = run_replace('write_update_upload_array', $upload[$i], $dest_file, $board, $wr_id, $w);
}
}
// 프로그램 원래 파일명
$upload[$i]['source'] = $filename;
$upload[$i]['filesize'] = $filesize;
// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|pht|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $filename);
shuffle($chars_array);
$shuffle = implode('', $chars_array);
// 첨부파일 첨부시 첨부파일명에 공백이 포함되어 있으면 일부 PC에서 보이지 않거나 다운로드 되지 않는 현상이 있습니다. (길상여의 님 090925)
$upload[$i]['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);
$dest_file = G5_DATA_PATH.'/file/'.$bo_table.'/'.$upload[$i]['file'];
// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['bf_file']['error'][$i]);
// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, G5_FILE_PERMISSION);
$dest_file = run_replace('write_update_upload_file', $dest_file, $board, $wr_id, $w);
$upload[$i] = run_replace('write_update_upload_array', $upload[$i], $dest_file, $board, $wr_id, $w);
}
} // end for
} // end if
// 나중에 테이블에 저장하는 이유는 $wr_id 값을 저장해야 하기 때문입니다.
for ($i=0; $i<count($upload); $i++)
@@ -593,10 +596,10 @@ for ($i=0; $i<count($upload); $i++)
bf_fileurl = '{$upload[$i]['fileurl']}',
bf_thumburl = '{$upload[$i]['thumburl']}',
bf_storage = '{$upload[$i]['storage']}',
bf_filesize = '{$upload[$i]['filesize']}',
bf_width = '{$upload[$i]['image']['0']}',
bf_height = '{$upload[$i]['image']['1']}',
bf_type = '{$upload[$i]['image']['2']}',
bf_filesize = '".(int)$upload[$i]['filesize']."',
bf_width = '".(int)$upload[$i]['image'][0]."',
bf_height = '".(int)$upload[$i]['image'][1]."',
bf_type = '".(int)$upload[$i]['image'][2]."',
bf_datetime = '".G5_TIME_YMDHIS."'
where bo_table = '{$bo_table}'
and wr_id = '{$wr_id}'
@@ -626,10 +629,10 @@ for ($i=0; $i<count($upload); $i++)
bf_thumburl = '{$upload[$i]['thumburl']}',
bf_storage = '{$upload[$i]['storage']}',
bf_download = 0,
bf_filesize = '{$upload[$i]['filesize']}',
bf_width = '{$upload[$i]['image']['0']}',
bf_height = '{$upload[$i]['image']['1']}',
bf_type = '{$upload[$i]['image']['2']}',
bf_filesize = '".(int)$upload[$i]['filesize']."',
bf_width = '".(int)$upload[$i]['image'][0]."',
bf_height = '".(int)$upload[$i]['image'][1]."',
bf_type = '".(int)$upload[$i]['image'][2]."',
bf_datetime = '".G5_TIME_YMDHIS."' ";
sql_query($sql);
+46 -10
View File
@@ -216,10 +216,6 @@ ini_set("session.gc_divisor", 100); // session.gc_divisor는 session.gc_probabil
session_set_cookie_params(0, '/');
ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);
@session_start();
//==============================================================================
//==============================================================================
// 공용 변수
//------------------------------------------------------------------------------
@@ -227,12 +223,43 @@ ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = get_config();
// 본인인증 또는 쇼핑몰 사용시에만 secure; SameSite=None 로 설정합니다.
if( $config['cf_cert_use'] || (defined('G5_YOUNGCART_VER') && G5_YOUNGCART_VER) ) {
// Chrome 80 버전부터 아래 이슈 대응
// https://developers-kr.googleblog.com/2020/01/developers-get-ready-for-new.html?fbclid=IwAR0wnJFGd6Fg9_WIbQPK3_FxSSpFLqDCr9bjicXdzy--CCLJhJgC9pJe5ss
if(!function_exists('session_start_samesite')) {
function session_start_samesite($options = array())
{
global $g5;
$res = @session_start($options);
// IE 브라우저 또는 엣지브라우저 또는 IOS 모바일과 http환경에서는 secure; SameSite=None을 설정하지 않습니다.
if( preg_match('/Edge/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/(iPhone|iPod|iPad).*AppleWebKit.*Safari/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || preg_match('~Trident/7.0(; Touch)?; rv:11.0~',$_SERVER['HTTP_USER_AGENT']) || ! (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ){
return $res;
}
$headers = headers_list();
krsort($headers);
foreach ($headers as $header) {
if (!preg_match('~^Set-Cookie: PHPSESSID=~', $header)) continue;
$header = preg_replace('~; secure(; HttpOnly)?$~', '', $header) . '; secure; SameSite=None';
header($header, false);
$g5['session_cookie_samesite'] = 'none';
break;
}
return $res;
}
}
session_start_samesite();
} else {
@session_start();
}
//==============================================================================
define('G5_HTTP_BBS_URL', https_url(G5_BBS_DIR, false));
define('G5_HTTPS_BBS_URL', https_url(G5_BBS_DIR, true));
if ($config['cf_editor'])
define('G5_EDITOR_LIB', G5_EDITOR_PATH."/{$config['cf_editor']}/editor.lib.php");
else
define('G5_EDITOR_LIB', G5_LIB_PATH."/editor.lib.php");
define('G5_CAPTCHA_DIR', !empty($config['cf_captcha']) ? $config['cf_captcha'] : 'kcaptcha');
define('G5_CAPTCHA_URL', G5_PLUGIN_URL.'/'.G5_CAPTCHA_DIR);
@@ -430,12 +457,22 @@ if ($bo_table) {
}
}
}
// 게시판에서
if (isset($board['bo_select_editor']) && $board['bo_select_editor']){
$config['cf_editor'] = $board['bo_select_editor'];
}
}
if ($gr_id) {
if ($gr_id && !is_array($gr_id)) {
$group = get_group($gr_id);
}
if ($config['cf_editor']) {
define('G5_EDITOR_LIB', G5_EDITOR_PATH."/{$config['cf_editor']}/editor.lib.php");
} else {
define('G5_EDITOR_LIB', G5_LIB_PATH."/editor.lib.php");
}
// 회원, 비회원 구분
$is_member = $is_guest = false;
@@ -624,7 +661,6 @@ include_once(G5_BBS_PATH.'/visit_insert.inc.php');
// 일정 기간이 지난 DB 데이터 삭제 및 최적화
include_once(G5_BBS_PATH.'/db_table.optimize.php');
// common.php 파일을 수정할 필요가 없도록 확장합니다.
$extend_file = array();
$tmp = dir(G5_EXTEND_PATH);
+1 -1
View File
@@ -5,7 +5,7 @@
********************/
define('G5_VERSION', '그누보드5');
define('G5_GNUBOARD_VER', '5.4.1.2');
define('G5_GNUBOARD_VER', '5.4.2.9');
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
define('_GNUBOARD_', true);
+1 -1
View File
@@ -2,7 +2,7 @@
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 유저 사이드뷰에서 아이콘 지정 안했을시 기본 no 프로필 이미지
define('G5_NO_PROFILE_IMG', '<span class="profile_img"><img src="'.G5_IMG_URL.'/no_profile.gif" alt="no_profile" width="20" height="20"></span>');
define('G5_NO_PROFILE_IMG', '<span class="profile_img"><img src="'.G5_IMG_URL.'/no_profile.gif" alt="no_profile" width="'.$config['cf_member_icon_width'].'" height="'.$config['cf_member_icon_height'].'"></span>');
// 썸네일 처리 방식, 비율유지 하지 않고 썸네일을 생성하려면 주석을 풀고 값은 false 입력합니다. ( true 또는 주석으로 된 경우에는 비율 유지합니다. )
//define('G5_USE_THUMB_RATIO', false);
+6
View File
@@ -13,6 +13,12 @@ define('G5_SMS5_ADMIN_DIR', 'sms_admin');
define('G5_SMS5_ADMIN_PATH', G5_ADMIN_PATH.'/'.G5_SMS5_ADMIN_DIR);
define('G5_SMS5_ADMIN_URL', G5_ADMIN_URL.'/'.G5_SMS5_ADMIN_DIR);
define('ICODE_JSON_SOCKET_HOST', '211.172.232.124');
define('ICODE_JSON_SOCKET_PORT', '9201');
define('G5_ICODE_LMS_MAX_LENGTH', 1500); // 구버전 LMS 최대길이
define('G5_ICODE_JSON_MAX_LENGTH', 2000); // JSON 버전 LMS 최대길이
// SMS 테이블명
$g5['sms5_prefix'] = 'sms5_';
$g5['sms5_config_table'] = $g5['sms5_prefix'] . 'config';
+2 -2
View File
@@ -1,6 +1,6 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
define('G5_JS_VER', '191110');
define('G5_CSS_VER', '191110');
define('G5_JS_VER', '191202');
define('G5_CSS_VER', '191202');
?>
+1 -1
View File
@@ -337,7 +337,7 @@ for($i=0; $row=sql_fetch_array($result); $i++) {
// 게시판 테이블 생성
$bo_table = $row['bo_table'];
$file = file(G5_ADMIN_PATH.'/sql_write.sql');
$sql = implode($file, "\n");
$sql = implode("\n", $file);
$create_table = $g5['write_prefix'] . $bo_table;
+2
View File
@@ -1,6 +1,8 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
run_event('pre_head');
if(defined('G5_THEME_PATH')) {
require_once(G5_THEME_PATH.'/head.php');
return;
-2
View File
@@ -2,8 +2,6 @@
// 이 파일은 새로운 파일 생성시 반드시 포함되어야 함
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
run_event('head_sub');
// 테마 head.sub.php 파일
if(!defined('G5_IS_ADMIN') && defined('G5_THEME_PATH') && is_file(G5_THEME_PATH.'/head.sub.php')) {
require_once(G5_THEME_PATH.'/head.sub.php');
+5 -1
View File
@@ -15,6 +15,10 @@ if (file_exists($dbconfig_file)) {
die(install_json_msg('프로그램이 이미 설치되어 있습니다.'));
}
if (preg_match("/[^0-9a-z_]+/i", $_POST['table_prefix']) ) {
die(install_json_msg('TABLE명 접두사는 영문자, 숫자, _ 만 입력하세요.'));
}
$mysql_host = safe_install_string_check($_POST['mysql_host'], 'json');
$mysql_user = safe_install_string_check($_POST['mysql_user'], 'json');
$mysql_pass = safe_install_string_check($_POST['mysql_pass'], 'json');
@@ -22,7 +26,7 @@ $mysql_db = safe_install_string_check($_POST['mysql_db'], 'json');
$table_prefix= safe_install_string_check(preg_replace('/[^a-zA-Z0-9_]/', '_', $_POST['table_prefix']));
$tmp_str = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '';
$ajax_token = md5($tmp_str.$_SERVER['REMOTE_ADDR'].$_SERVER['DOCUMENT_ROOT']);
$ajax_token = md5($tmp_str.$_SERVER['REMOTE_ADDR'].dirname(dirname(__FILE__).'/'));
$bool_ajax_token = ($ajax_token == $_POST['ajax_token']) ? true : false;
+1
View File
@@ -47,6 +47,7 @@ CREATE TABLE IF NOT EXISTS `g5_board` (
`bo_use_file_content` tinyint(4) NOT NULL DEFAULT '0',
`bo_use_secret` tinyint(4) NOT NULL DEFAULT '0',
`bo_use_dhtml_editor` tinyint(4) NOT NULL DEFAULT '0',
`bo_select_editor` varchar(50) NOT NULL DEFAULT '',
`bo_use_rss_view` tinyint(4) NOT NULL DEFAULT '0',
`bo_use_good` tinyint(4) NOT NULL DEFAULT '0',
`bo_use_nogood` tinyint(4) NOT NULL DEFAULT '0',
+2 -2
View File
@@ -19,7 +19,7 @@ if (!isset($_POST['agree']) || $_POST['agree'] != '동의함') {
}
$tmp_str = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '';
$ajax_token = md5($tmp_str.$_SERVER['REMOTE_ADDR'].$_SERVER['DOCUMENT_ROOT']);
$ajax_token = md5($tmp_str.$_SERVER['REMOTE_ADDR'].dirname(dirname(__FILE__).'/'));
?>
@@ -61,7 +61,7 @@ $ajax_token = md5($tmp_str.$_SERVER['REMOTE_ADDR'].$_SERVER['DOCUMENT_ROOT']);
<th scope="row"><label for="table_prefix">TABLE명 접두사</label></th>
<td>
<input name="table_prefix" type="text" value="g5_" id="table_prefix">
<span>가능한 변경하지 마십시오.</span>
<span>TABLE명 접두사는 영문자, 숫자, _ 만 입력 가능합니다.</span>
</td>
</tr>
</tbody>
+9 -5
View File
@@ -33,6 +33,10 @@ $admin_pass = $_POST['admin_pass'];
$admin_name = $_POST['admin_name'];
$admin_email = $_POST['admin_email'];
if (preg_match("/[^0-9a-z_]+/i", $table_prefix) ) {
die('<div class="ins_inner"><p>TABLE명 접두사는 영문자, 숫자, _ 만 입력하세요.</p><div class="inner_btn"><a href="./install_config.php">뒤로가기</a></div></div>');
}
if (preg_match("/[^0-9a-z_]+/i", $admin_id)) {
die('<div class="ins_inner"><p>관리자 아이디는 영문자, 숫자, _ 만 입력하세요.</p><div class="inner_btn"><a href="./install_config.php">뒤로가기</a></div></div>');
}
@@ -292,7 +296,7 @@ for ($i=0; $i<count($tmp_bo_table); $i++)
// 게시판 테이블 생성
$file = file("../".G5_ADMIN_DIR."/sql_write.sql");
$file = get_db_create_replace($file);
$sql = implode($file, "\n");
$sql = implode("\n", $file);
$create_table = $table_prefix.'write_' . $tmp_bo_table[$i];
@@ -340,10 +344,10 @@ $f = @fopen($file, 'a');
fwrite($f, "<?php\n");
fwrite($f, "if (!defined('_GNUBOARD_')) exit;\n");
fwrite($f, "define('G5_MYSQL_HOST', '{$mysql_host}');\n");
fwrite($f, "define('G5_MYSQL_USER', '{$mysql_user}');\n");
fwrite($f, "define('G5_MYSQL_PASSWORD', '{$mysql_pass}');\n");
fwrite($f, "define('G5_MYSQL_DB', '{$mysql_db}');\n");
fwrite($f, "define('G5_MYSQL_HOST', '".addcslashes($mysql_host, "\\'")."');\n");
fwrite($f, "define('G5_MYSQL_USER', '".addcslashes($mysql_user, "\\'")."');\n");
fwrite($f, "define('G5_MYSQL_PASSWORD', '".addcslashes($mysql_pass, "\\'")."');\n");
fwrite($f, "define('G5_MYSQL_DB', '".addcslashes($mysql_db, "\\'")."');\n");
fwrite($f, "define('G5_MYSQL_SET_MODE', {$mysql_set_mode});\n\n");
fwrite($f, "define('G5_TABLE_PREFIX', '{$table_prefix}');\n\n");
fwrite($f, "\$g5['write_prefix'] = G5_TABLE_PREFIX.'write_'; // 게시판 테이블명 접두사\n\n");
+388
View File
@@ -0,0 +1,388 @@
/* This is the core CSS of Tooltipster */
/* GENERAL STRUCTURE RULES (do not edit this section) */
.tooltipster-base {
/* this ensures that a constrained height set by functionPosition,
if greater that the natural height of the tooltip, will be enforced
in browsers that support display:flex */
display: flex;
pointer-events: none;
/* this may be overriden in JS for fixed position origins */
position: absolute;
}
.tooltipster-box {
/* see .tooltipster-base. flex-shrink 1 is only necessary for IE10-
and flex-basis auto for IE11- (at least) */
flex: 1 1 auto;
}
.tooltipster-content {
/* prevents an overflow if the user adds padding to the div */
box-sizing: border-box;
/* these make sure we'll be able to detect any overflow */
max-height: 100%;
max-width: 100%;
overflow: auto;
}
.tooltipster-ruler {
/* these let us test the size of the tooltip without overflowing the window */
bottom: 0;
left: 0;
overflow: hidden;
position: fixed;
right: 0;
top: 0;
visibility: hidden;
}
/* ANIMATIONS */
/* Open/close animations */
/* fade */
.tooltipster-fade {
opacity: 0;
-webkit-transition-property: opacity;
-moz-transition-property: opacity;
-o-transition-property: opacity;
-ms-transition-property: opacity;
transition-property: opacity;
}
.tooltipster-fade.tooltipster-show {
opacity: 1;
}
/* grow */
.tooltipster-grow {
-webkit-transform: scale(0,0);
-moz-transform: scale(0,0);
-o-transform: scale(0,0);
-ms-transform: scale(0,0);
transform: scale(0,0);
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
-webkit-backface-visibility: hidden;
}
.tooltipster-grow.tooltipster-show {
-webkit-transform: scale(1,1);
-moz-transform: scale(1,1);
-o-transform: scale(1,1);
-ms-transform: scale(1,1);
transform: scale(1,1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}
/* swing */
.tooltipster-swing {
opacity: 0;
-webkit-transform: rotateZ(4deg);
-moz-transform: rotateZ(4deg);
-o-transform: rotateZ(4deg);
-ms-transform: rotateZ(4deg);
transform: rotateZ(4deg);
-webkit-transition-property: -webkit-transform, opacity;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
-ms-transition-property: -ms-transform;
transition-property: transform;
}
.tooltipster-swing.tooltipster-show {
opacity: 1;
-webkit-transform: rotateZ(0deg);
-moz-transform: rotateZ(0deg);
-o-transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
transform: rotateZ(0deg);
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1);
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
-o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
}
/* fall */
.tooltipster-fall {
-webkit-transition-property: top;
-moz-transition-property: top;
-o-transition-property: top;
-ms-transition-property: top;
transition-property: top;
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}
.tooltipster-fall.tooltipster-initial {
top: 0 !important;
}
.tooltipster-fall.tooltipster-show {
}
.tooltipster-fall.tooltipster-dying {
-webkit-transition-property: all;
-moz-transition-property: all;
-o-transition-property: all;
-ms-transition-property: all;
transition-property: all;
top: 0 !important;
opacity: 0;
}
/* slide */
.tooltipster-slide {
-webkit-transition-property: left;
-moz-transition-property: left;
-o-transition-property: left;
-ms-transition-property: left;
transition-property: left;
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
}
.tooltipster-slide.tooltipster-initial {
left: -40px !important;
}
.tooltipster-slide.tooltipster-show {
}
.tooltipster-slide.tooltipster-dying {
-webkit-transition-property: all;
-moz-transition-property: all;
-o-transition-property: all;
-ms-transition-property: all;
transition-property: all;
left: 0 !important;
opacity: 0;
}
/* Update animations */
/* We use animations rather than transitions here because
transition durations may be specified in the style tag due to
animationDuration, and we try to avoid collisions and the use
of !important */
/* fade */
@keyframes tooltipster-fading {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.tooltipster-update-fade {
animation: tooltipster-fading 400ms;
}
/* rotate */
@keyframes tooltipster-rotating {
25% {
transform: rotate(-2deg);
}
75% {
transform: rotate(2deg);
}
100% {
transform: rotate(0);
}
}
.tooltipster-update-rotate {
animation: tooltipster-rotating 600ms;
}
/* scale */
@keyframes tooltipster-scaling {
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
.tooltipster-update-scale {
animation: tooltipster-scaling 600ms;
}
/**
* DEFAULT STYLE OF THE SIDETIP PLUGIN
*
* All styles are "namespaced" with .tooltipster-sidetip to prevent
* conflicts between plugins.
*/
/* .tooltipster-box */
.tooltipster-sidetip .tooltipster-box {
background: #565656;
border: 2px solid black;
border-radius: 4px;
}
.tooltipster-sidetip.tooltipster-bottom .tooltipster-box {
margin-top: 8px;
}
.tooltipster-sidetip.tooltipster-left .tooltipster-box {
margin-right: 8px;
}
.tooltipster-sidetip.tooltipster-right .tooltipster-box {
margin-left: 8px;
}
.tooltipster-sidetip.tooltipster-top .tooltipster-box {
margin-bottom: 8px;
}
/* .tooltipster-content */
.tooltipster-sidetip .tooltipster-content {
color: white;
line-height: 18px;
padding: 6px 14px;
}
/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that
corresponds to the arrow we want to display */
.tooltipster-sidetip .tooltipster-arrow {
overflow: hidden;
position: absolute;
}
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow {
height: 10px;
/* half the width, for centering */
margin-left: -10px;
top: 0;
width: 20px;
}
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow {
height: 20px;
margin-top: -10px;
right: 0;
/* top 0 to keep the arrow from overflowing .tooltipster-base when it has not
been positioned yet */
top: 0;
width: 10px;
}
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {
height: 20px;
margin-top: -10px;
left: 0;
/* same as .tooltipster-left .tooltipster-arrow */
top: 0;
width: 10px;
}
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {
bottom: 0;
height: 10px;
margin-left: -10px;
width: 20px;
}
/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */
.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border {
height: 0;
position: absolute;
width: 0;
}
/* .tooltipster-arrow-background */
.tooltipster-sidetip .tooltipster-arrow-background {
border: 10px solid transparent;
}
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {
border-bottom-color: #565656;
left: 0;
top: 3px;
}
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {
border-left-color: #565656;
left: -3px;
top: 0;
}
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {
border-right-color: #565656;
left: 3px;
top: 0;
}
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {
border-top-color: #565656;
left: 0;
top: -3px;
}
/* .tooltipster-arrow-border */
.tooltipster-sidetip .tooltipster-arrow-border {
border: 10px solid transparent;
left: 0;
top: 0;
}
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {
border-bottom-color: black;
}
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {
border-left-color: black;
}
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {
border-right-color: black;
}
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {
border-top-color: black;
}
/* tooltipster-arrow-uncropped */
.tooltipster-sidetip .tooltipster-arrow-uncropped {
position: relative;
}
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped {
top: -10px;
}
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped {
left: -10px;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+14 -5
View File
@@ -67,8 +67,14 @@ class FileCache
{
return FALSE;
}
$data = unserialize(file_get_contents( $cache_file_path ));
try{
$file_contents = file_get_contents($cache_file_path);
$file_ex = explode("\n\n", $file_contents);
$data = unserialize(base64_decode($file_ex[1]));
} catch(Exception $e){
$data = array('ttl'=>1, 'time'=>time() - 1000);
}
if ($data['ttl'] > 0 && time() > $data['time'] + $data['ttl'])
{
@@ -135,7 +141,10 @@ class FileCache
'data' => $data
);
if ($this->write_file($cache_file_path, serialize($contents)))
$cache_content = "<?php if (!defined('_GNUBOARD_')) exit; ?>\n\n";
$cache_content .= base64_encode(serialize($contents));
if ($this->write_file($cache_file_path, $cache_content))
{
chmod($cache_file_path, G5_FILE_PERMISSION);
return TRUE;
@@ -167,7 +176,7 @@ class FileCache
if ($ttl !== null) {
$expire = time() + $ttl;
}
return serialize(array($data, $expire));
return base64_encode(serialize(array($data, $expire)));
}
/**
@@ -181,7 +190,7 @@ class FileCache
*/
public function decode($data)
{
return unserialize($data);
return unserialize(base64_decode($data));
}
}
?>
+3
View File
@@ -87,6 +87,9 @@ Class GML_Hook extends Hook {
foreach ($filters as $priority) {
foreach ($priority as $filter) {
if( isset($args[0]) ){
$args[0] = $value;
}
$replace = $that->runAction($filter, $args);
if( ! is_null($replace) ) {
+116 -14
View File
@@ -116,6 +116,19 @@ function goto_url($url)
// 세션변수 생성
function set_session($session_name, $value)
{
global $g5;
static $check_cookie = null;
if( $check_cookie === null ){
$cookie_session_name = session_name();
if( ! isset($g5['session_cookie_samesite']) && ! ($cookie_session_name && isset($_COOKIE[$cookie_session_name]) && $_COOKIE[$cookie_session_name]) && ! headers_sent() ){
@session_regenerate_id(false);
}
$check_cookie = 1;
}
if (PHP_VERSION < '5.3.0')
session_register($session_name);
// PHP 버전별 차이를 없애기 위한 방법
@@ -598,7 +611,7 @@ function html_purifier($html)
//유튜브, 비메오 전체화면 가능하게 하기
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
return run_replace('html_purifier_result', $purifier->purify($html), $purifier, $html);
}
@@ -733,6 +746,10 @@ function get_next_num($table)
function get_group($gr_id, $is_cache=false)
{
global $g5;
if( is_array($gr_id) ){
return array();
}
static $cache = array();
@@ -756,7 +773,8 @@ function get_member($mb_id, $fields='*', $is_cache=false)
{
global $g5;
$mb_id = preg_replace("/[^0-9a-z_]+/i", "", $mb_id);
if (preg_match("/[^0-9a-z_]+/i", $mb_id))
return array();
static $cache = array();
@@ -1385,7 +1403,8 @@ function view_file_link($file, $width, $height, $content='')
$attr = '';
if (preg_match("/\.({$config['cf_image_extension']})$/i", $file)) {
$img = '<a href="'.G5_BBS_URL.'/view_image.php?bo_table='.$board['bo_table'].'&amp;fn='.urlencode($file).'" target="_blank" class="view_image">';
$attr_href = run_replace('thumb_view_image_href', G5_BBS_URL.'/view_image.php?bo_table='.$board['bo_table'].'&amp;fn='.urlencode($file), $file, $board['bo_table'], $width, $height, $content);
$img = '<a href="'.$attr_href.'" target="_blank" class="view_image">';
$img .= '<img src="'.G5_DATA_URL.'/file/'.$board['bo_table'].'/'.urlencode($file).'" alt="'.$content.'" '.$attr.'>';
$img .= '</a>';
@@ -1788,7 +1807,7 @@ function get_table_define($table, $crlf="\n")
$schema_create .= $crlf . ') ENGINE=MyISAM DEFAULT CHARSET=utf8';
return $schema_create;
return get_db_create_replace($schema_create);
} // end of the 'PMA_getTableDef()' function
@@ -2300,6 +2319,8 @@ function delete_editor_thumbnail($contents)
{
if(!$contents)
return;
run_event('delete_editor_thumbnail_before', $contents);
// $contents 중 img 태그 추출
$matchs = get_editor_image($contents);
@@ -2320,6 +2341,8 @@ function delete_editor_thumbnail($contents)
unlink($filename);
}
}
run_event('delete_editor_thumbnail_after', $contents, $matchs);
}
// 1:1문의 첨부파일 썸네일 삭제
@@ -2461,7 +2484,7 @@ function add_stylesheet($stylesheet, $order=0)
{
global $html_process;
if(trim($stylesheet))
if(trim($stylesheet) && method_exists($html_process, 'merge_stylesheet') )
$html_process->merge_stylesheet($stylesheet, $order);
}
@@ -2469,7 +2492,7 @@ function add_javascript($javascript, $order=0)
{
global $html_process;
if(trim($javascript))
if(trim($javascript) && method_exists($html_process, 'merge_javascript') )
$html_process->merge_javascript($javascript, $order);
}
@@ -2581,7 +2604,7 @@ class html_process {
if(!trim($js[1]))
continue;
$js[1] = preg_replace('#\.js([\'\"]?>)$#i', '.js?ver='.G5_JS_VER.'$1', $js[1]);
$js[1] = preg_replace('#\.js([\'\"]?>)<\/script>$#i', '.js?ver='.G5_JS_VER.'$1</script>', $js[1]);
$javascript .= $php_eol.$js[1];
$php_eol = PHP_EOL;
@@ -3009,6 +3032,9 @@ function clean_xss_tags($str, $check_entities=0)
if( $check_entities ){
$result = str_replace(array('&colon;', '&lpar;', '&rpar;', '&NewLine;', '&Tab;'), '', $result);
}
$result = preg_replace('#([^\p{L}]|^)(?:javascript|jar|applescript|vbscript|vbs|wscript|jscript|behavior|mocha|livescript|view-source)\s*:(?:.*?([/\\\;()\'">]|$))#ius',
'$1$2', $result);
if((string)$result === (string)$str) break;
@@ -3022,11 +3048,50 @@ function clean_xss_tags($str, $check_entities=0)
// XSS 어트리뷰트 태그 제거
function clean_xss_attributes($str)
{
$str = preg_replace('#(onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavaible|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragdrop|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterupdate|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmoveout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload)\\s*=\\s*\\\?".*?"#is', '', $str);
$xss_attributes_string = 'onAbort|onActivate|onAttribute|onAfterPrint|onAfterScriptExecute|onAfterUpdate|onAnimationCancel|onAnimationEnd|onAnimationIteration|onAnimationStart|onAriaRequest|onAutoComplete|onAutoCompleteError|onAuxClick|onBeforeActivate|onBeforeCopy|onBeforeCut|onBeforeDeactivate|onBeforeEditFocus|onBeforePaste|onBeforePrint|onBeforeScriptExecute|onBeforeUnload|onBeforeUpdate|onBegin|onBlur|onBounce|onCancel|onCanPlay|onCanPlayThrough|onCellChange|onChange|onClick|onClose|onCommand|onCompassNeedsCalibration|onContextMenu|onControlSelect|onCopy|onCueChange|onCut|onDataAvailable|onDataSetChanged|onDataSetComplete|onDblClick|onDeactivate|onDeviceLight|onDeviceMotion|onDeviceOrientation|onDeviceProximity|onDrag|onDragDrop|onDragEnd|onDragEnter|onDragLeave|onDragOver|onDragStart|onDrop|onDurationChange|onEmptied|onEnd|onEnded|onError|onErrorUpdate|onExit|onFilterChange|onFinish|onFocus|onFocusIn|onFocusOut|onFormChange|onFormInput|onFullScreenChange|onFullScreenError|onGotPointerCapture|onHashChange|onHelp|onInput|onInvalid|onKeyDown|onKeyPress|onKeyUp|onLanguageChange|onLayoutComplete|onLoad|onLoadedData|onLoadedMetaData|onLoadStart|onLoseCapture|onLostPointerCapture|onMediaComplete|onMediaError|onMessage|onMouseDown|onMouseEnter|onMouseLeave|onMouseMove|onMouseOut|onMouseOver|onMouseUp|onMouseWheel|onMove|onMoveEnd|onMoveStart|onMozFullScreenChange|onMozFullScreenError|onMozPointerLockChange|onMozPointerLockError|onMsContentZoom|onMsFullScreenChange|onMsFullScreenError|onMsGestureChange|onMsGestureDoubleTap|onMsGestureEnd|onMsGestureHold|onMsGestureStart|onMsGestureTap|onMsGotPointerCapture|onMsInertiaStart|onMsLostPointerCapture|onMsManipulationStateChanged|onMsPointerCancel|onMsPointerDown|onMsPointerEnter|onMsPointerLeave|onMsPointerMove|onMsPointerOut|onMsPointerOver|onMsPointerUp|onMsSiteModeJumpListItemRemoved|onMsThumbnailClick|onOffline|onOnline|onOutOfSync|onPage|onPageHide|onPageShow|onPaste|onPause|onPlay|onPlaying|onPointerCancel|onPointerDown|onPointerEnter|onPointerLeave|onPointerLockChange|onPointerLockError|onPointerMove|onPointerOut|onPointerOver|onPointerUp|onPopState|onProgress|onPropertyChange|onqt_error|onRateChange|onReadyStateChange|onReceived|onRepeat|onReset|onResize|onResizeEnd|onResizeStart|onResume|onReverse|onRowDelete|onRowEnter|onRowExit|onRowInserted|onRowsDelete|onRowsEnter|onRowsExit|onRowsInserted|onScroll|onSearch|onSeek|onSeeked|onSeeking|onSelect|onSelectionChange|onSelectStart|onStalled|onStorage|onStorageCommit|onStart|onStop|onShow|onSyncRestored|onSubmit|onSuspend|onSynchRestored|onTimeError|onTimeUpdate|onTimer|onTrackChange|onTransitionEnd|onToggle|onTouchCancel|onTouchEnd|onTouchLeave|onTouchMove|onTouchStart|onTransitionCancel|onTransitionEnd|onUnload|onURLFlip|onUserProximity|onVolumeChange|onWaiting|onWebKitAnimationEnd|onWebKitAnimationIteration|onWebKitAnimationStart|onWebKitFullScreenChange|onWebKitFullScreenError|onWebKitTransitionEnd|onWheel';
do {
$count = $temp_count = 0;
$str = preg_replace(
'/(.*)(?:' . $xss_attributes_string . ')(?:\s*=\s*)(?:\'(?:.*?)\'|"(?:.*?)")(.*)/ius',
'$1-$2-$3-$4',
$str,
-1,
$temp_count
);
$count += $temp_count;
$str = preg_replace(
'/(.*)(?:' . $xss_attributes_string . ')\s*=\s*(?:[^\s>]*)(.*)/ius',
'$1$2',
$str,
-1,
$temp_count
);
$count += $temp_count;
} while ($count);
return $str;
}
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;
}
// unescape nl 얻기
function conv_unescape_nl($str)
{
@@ -3056,7 +3121,8 @@ function member_delete($mb_id)
}
// 회원자료는 정보만 없앤 후 아이디는 보관하여 다른 사람이 사용하지 못하도록 함 : 061025
$sql = " update {$g5['member_table']} set mb_password = '', mb_level = 1, mb_email = '', mb_homepage = '', mb_tel = '', mb_hp = '', mb_zip1 = '', mb_zip2 = '', mb_addr1 = '', mb_addr2 = '', mb_birth = '', mb_sex = '', mb_signature = '', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 삭제함\n{$mb['mb_memo']}' where mb_id = '{$mb_id}' ";
$sql = " update {$g5['member_table']} set mb_password = '', mb_level = 1, mb_email = '', mb_homepage = '', mb_tel = '', mb_hp = '', mb_zip1 = '', mb_zip2 = '', mb_addr1 = '', mb_addr2 = '', mb_birth = '', mb_sex = '', mb_signature = '', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 삭제함\n".sql_real_escape_string($mb['mb_memo'])."' where mb_id = '{$mb_id}' ";
sql_query($sql);
// 포인트 테이블에서 삭제
@@ -3090,6 +3156,8 @@ function member_delete($mb_id)
// 프로필 이미지 삭제
@unlink(G5_DATA_PATH.'/member_image/'.substr($mb_id,0,2).'/'.$mb_id.'.gif');
run_event('member_delete_after', $mb_id);
}
// 이메일 주소 추출
@@ -3548,7 +3616,7 @@ function get_member_profile_img($mb_id='', $width='', $height='', $alt='profile_
// 프로필 이미지가 없을때 기본 이미지
$no_profile_img = (defined('G5_THEME_NO_PROFILE_IMG') && G5_THEME_NO_PROFILE_IMG) ? G5_THEME_NO_PROFILE_IMG : G5_NO_PROFILE_IMG;
$tmp = array();
preg_match( '/src="([^"]*)"/i', $foo, $tmp );
preg_match( '/src="([^"]*)"/i', $no_profile_img, $tmp );
$no_profile_cache = $src = isset($tmp[1]) ? $tmp[1] : G5_IMG_URL.'/no_profile.gif';
}
}
@@ -3580,6 +3648,36 @@ function get_head_title($title){
return $title;
}
function is_sms_send($is_type=''){
global $config;
$is_sms_send = false;
// 토큰키를 사용한다면
if(isset($config['cf_icode_token_key']) && $config['cf_icode_token_key']){
$is_sms_send = true;
} else if($config['cf_icode_id'] && $config['cf_icode_pw']) {
// 충전식일 경우 잔액이 있는지 체크
$userinfo = get_icode_userinfo($config['cf_icode_id'], $config['cf_icode_pw']);
if($userinfo['code'] == 0) {
if($userinfo['payment'] == 'C') { // 정액제
$is_sms_send = true;
} else {
$minimum_coin = 100;
if(defined('G5_ICODE_COIN'))
$minimum_coin = intval(G5_ICODE_COIN);
if((int)$userinfo['coin'] >= $minimum_coin)
$is_sms_send = true;
}
}
}
return $is_sms_send;
}
function is_use_email_certify(){
global $config;
@@ -3659,10 +3757,10 @@ function is_include_path_check($path='', $is_input='')
// 장태진 @jtjisgod <jtjisgod@gmail.com> 추가
// 보안 목적 : rar wrapper 차단
if( stripos($path, 'rar:') !== false || stripos($path, 'php:') !== false || stripos($path, 'zlib:') !== false || stripos($path, 'bzip2:') !== false || stripos($path, 'zip:') !== false || stripos($path, 'data:') !== false || stripos($path, 'phar:') !== false || stripos($path, 'file:') !== false ){
if( stripos($path, 'rar:') !== false || stripos($path, 'php:') !== false || stripos($path, 'zlib:') !== false || stripos($path, 'bzip2:') !== false || stripos($path, 'zip:') !== false || stripos($path, 'data:') !== false || stripos($path, 'phar:') !== false || stripos($path, 'file:') !== false || stripos($path, '://') !== false ){
return false;
}
$replace_path = str_replace('\\', '/', $path);
$slash_count = substr_count(str_replace('\\', '/', $_SERVER['SCRIPT_NAME']), '/');
$peer_count = substr_count($replace_path, '../');
@@ -3673,12 +3771,12 @@ function is_include_path_check($path='', $is_input='')
try {
// whether $path is unix or not
$unipath = strlen($path)==0 || $path{0}!='/';
$unipath = strlen($path)==0 || substr($path, 0, 1) != '/';
$unc = substr($path,0,2)=='\\\\'?true:false;
// attempts to detect if path is relative in which case, add cwd
if(strpos($path,':') === false && $unipath && !$unc){
$path=getcwd().DIRECTORY_SEPARATOR.$path;
if($path{0}=='/'){
if(substr($path, 0, 1) == '/'){
$unipath = false;
}
}
@@ -3731,6 +3829,10 @@ function is_include_path_check($path='', $is_input='')
return true;
}
function filter_input_include_path($path){
return str_replace('//', '/', $path);
}
function option_array_checked($option, $arr=array()){
$checked = '';
+1 -1
View File
@@ -329,7 +329,7 @@ function get_db_create_replace($sql_str){
function get_class_encrypt(){
static $cache;
if( $cache && is_object($obj) ){
if( $cache && is_object($cache) ){
return $cache;
}
+163 -51
View File
@@ -4,12 +4,19 @@ if (!defined('_GNUBOARD_')) exit;
// 요금제에 따른 port 구분
function get_icode_port_type($id, $pw)
{
global $config;
// 토큰키를 사용한다면 true 로 리턴
if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] ){
return 1;
}
$userinfo = get_icode_userinfo($id, $pw);
if($userinfo['payment'] == 'A') { // 충전제
return 1;
} else if($userinfo['payment'] == 'C') { // 정액제
return 1;
return 2;
} else {
return false;
}
@@ -28,10 +35,21 @@ class LMS {
var $socket_portcode;
var $Data = array();
var $Result = array();
var $icode_key;
// SMS 서버 접속
function SMS_con($host, $id, $pw, $portcode) {
$this->socket_host = $host;
global $config;
// 토큰키를 사용한다면
if(isset($config['cf_icode_token_key']) && $config['cf_icode_token_key']){
$this->icode_key = $config['cf_icode_token_key'];
$this->socket_host = ICODE_JSON_SOCKET_HOST;
$this->socket_port = ICODE_JSON_SOCKET_PORT;
} else {
$this->socket_host = $host;
}
$this->socket_portcode = $portcode;
$this->icode_id = FillSpace($id, 10);
$this->icode_pw = FillSpace($pw, 10);
@@ -43,32 +61,63 @@ class LMS {
}
function Add($strDest, $strCallBack, $strCaller, $strSubject, $strURL, $strData, $strDate="", $nCount) {
global $config;
// 문자 타입별 Port 설정.
$sendType = strlen($strData) > 90 ? 1 : 0; // 0: SMS / 1: LMS
/* 개발 완료 후 아래 포트를 rand 함수를 이용하는 라인으로 변경 바랍니다.*/
// 토큰키를 사용한다면
if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){
// 개행치환
$strData = preg_replace("/\r\n/","\n",$strData);
$strData = preg_replace("/\r/","\n",$strData);
// 충전식
if ($this->socket_portcode == 1) {
if($sendType && $sendType == 1) {
//$this->socket_port = 8200; // LMS
$this->socket_port=(int)rand(8200,8201); // LMS
} else {
//$this->socket_port = 6295; // SMS
$this->socket_port=(int)rand(6295,6297); // SMS
}
}
// 정액제
else {
if($sendType && $sendType == 1) {
//$this->socket_port = 8300; // LMS
$this->socket_port=(int)rand(8300,8301); // LMS
} else {
//$this->socket_port = 6291; // SMS
$this->socket_port=(int)rand(6291,6293); // SMS
}
}
$checks = array('msg'=>$strData, 'subject'=>$strSubject);
$tmps = array();
foreach( $checks as $k=>$v ){
// 문자 내용이 euc-kr 인지 체크합니다.
$enc = mb_detect_encoding($v, array('EUC-KR', 'UTF-8'));
// 문자 내용이 euc-kr 이면 json_encode 에서 깨지기 때문에 utf-8 로 변환합니다.
$tmps[$k] = ($enc === 'EUC-KR') ? iconv_utf8($v) : $v;
}
$strData = $tmps['msg'];
$strSubject = $tmps['subject'];
// 문자 타입별 Port 설정.
$sendType = strlen($strData)>90 ? 1 : 0; // 0: SMS / 1: LMS
if($sendType==0) $strSubject = "";
$is_use_json = true;
} else {
/* 개발 완료 후 아래 포트를 rand 함수를 이용하는 라인으로 변경 바랍니다.*/
// 충전식
if ($this->socket_portcode == 1) {
if($sendType && $sendType == 1) {
//$this->socket_port = 8200; // LMS
$this->socket_port=(int)rand(8200,8201); // LMS
} else {
//$this->socket_port = 6295; // SMS
$this->socket_port=(int)rand(6295,6297); // SMS
}
}
// 정액제
else {
if($sendType && $sendType == 1) {
//$this->socket_port = 8300; // LMS
$this->socket_port=(int)rand(8300,8301); // LMS
} else {
//$this->socket_port = 6291; // SMS
$this->socket_port=(int)rand(6291,6293); // SMS
}
}
}
$strCallBack = FillSpace($strCallBack, 11); // 회신번호
$strDate = FillSpace($strDate, 12); // 즉시(12byte 공백), 예약전송(YmdHi)
@@ -88,9 +137,9 @@ class LMS {
$strSubject = str_replace(">", "]", $strSubject);
$strSubject = FillSpace($strSubject,30);
$strData = FillSpace(CutChar($strData,1500),1500);
$strData = $is_use_json ? CutCharUtf8($strData, G5_ICODE_JSON_MAX_LENGTH) : FillSpace(CutChar($strData, G5_ICODE_LMS_MAX_LENGTH), G5_ICODE_LMS_MAX_LENGTH);
} else if (!$strURL) {
$strData = FillSpace(CutChar($strData,90),90);
$strData = $is_use_json ? CutCharUtf8($strData, G5_ICODE_JSON_MAX_LENGTH) : FillSpace(CutChar($strData,90),90);
$strCaller = FillSpace($strCaller,10);
} else {
$strURL = FillSpace($strURL,50);
@@ -102,39 +151,85 @@ class LMS {
for ($i=0; $i<$nCount; $i++) {
$strDest[$i] = FillSpace($strDest[$i],11);
if ($sendType && $sendType == 1) {
$this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strSubject.$strDate.$strData;
} else if (!$strURL) {
$this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strCaller.$strDate.$strData;
} else {
$strData = FillSpace(CheckCallCenter($strURL, $strDest[$i], $strData),80);
$this->Data[$i] = '05173 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strURL.$strDate.$strData;
}
if($is_use_json) {
$strDest[$i] = $strDest[$i];
$list = array(
"key" => $this->icode_key,
"tel" => $strDest[$i],
"cb" => $strCallBack,
"msg" => $strData,
"title" => $strSubject?$strSubject:"",
"date" => $strDate?$strDate:""
);
$packet = json_encode($list);
if( !$packet ){ // json_encode가 잘못되었으면 보내지 않습니다.
continue;
}
$this->Data[$i] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet;
} else {
$strDest[$i] = FillSpace($strDest[$i],11);
if ($sendType && $sendType == 1) {
$this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strSubject.$strDate.$strData;
} else if (!$strURL) {
$this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strCaller.$strDate.$strData;
} else {
$strData = FillSpace(CheckCallCenter($strURL, $strDest[$i], $strData),80);
$this->Data[$i] = '05173 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strURL.$strDate.$strData;
}
}
}
return true;
}
function Send() {
$fsocket = fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(60);
global $config;
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,30); }
$dest = substr($puts,26,11);
if (substr($gets,0,19) == "0223 00".$dest) {
$this->Result[] = $dest.":".substr($gets,19,10);
} else {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
}
$gets = "";
}
// 토큰키를 사용한다면
if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){
$fsocket = @fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(300);
fclose($fsocket);
$this->Data = "";
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,32); }
$json = json_decode(substr($puts,6), true);
$dest = $json["tel"];
if (substr($gets,0,20) == "0225 00".FillSpace($dest,12)) {
$this->Result[] = $dest.":".substr($gets,20,11);
} else {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
} else {
$fsocket = @fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(300);
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,30); }
$dest = substr($puts,26,11);
if (substr($gets,0,19) == "0223 00".$dest) {
$this->Result[] = $dest.":".substr($gets,19,10);
} else {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
}
$gets = "";
}
fclose($fsocket);
}
$this->Data = array();
return true;
}
}
@@ -168,6 +263,24 @@ function CutChar($word, $cut) {
return $word;
}
function CutCharUtf8($word, $cut) {
preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $word, $match); // target for BMP
$m = $match[0];
$slen = strlen($word); // length of source string
if ($slen <= $cut) return $word;
$ret = array();
$count = 0;
for ($i=0; $i < $cut; $i++) {
$count += (strlen($m[$i]) > 1)?2:1;
if ($count > $cut) break;
$ret[] = $m[$i];
}
return join('', $ret);
}
/**
* 수신번호의 값이 정확한 값인지 확인합니다.
*
@@ -183,7 +296,6 @@ function CheckCommonTypeDest($strDest, $nCount) {
}
}
/**
* 회신번호 유효성 여부조회 *
* @param string callback 회신번호
+131 -34
View File
@@ -44,8 +44,20 @@ class SMS {
var $SMS_Port;
var $Data = array();
var $Result = array();
var $icode_key;
var $socket_port;
var $socket_host;
function SMS_con($sms_server,$sms_id,$sms_pw,$port) {
global $config;
// 토큰키를 사용한다면
if(isset($config['cf_icode_token_key']) && $config['cf_icode_token_key']){
$this->icode_key = $config['cf_icode_token_key'];
$this->socket_host = ICODE_JSON_SOCKET_HOST;
$this->socket_port = ICODE_JSON_SOCKET_PORT;
}
$this->ID=$sms_id; // 계약 후 지정
$this->PWD=$sms_pw; // 계약 후 지정
$this->SMS_Server=$sms_server;
@@ -60,25 +72,82 @@ class SMS {
}
function Add($dest, $callBack, $Caller, $msg, $rsvTime="") {
global $g5;
global $g5, $config;
// 내용 검사 1
$Error = CheckCommonType($dest, $rsvTime);
if ($Error) return $Error;
// 내용 검사 2
//if ( eregi("[^0-9]",$callBack) ) return "회신 전화번호가 잘못되었습니다";
if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다";
// 토큰키를 사용한다면
if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){
$msg=cut_char($msg,80); // 80자 제한
// 보낼 내용을 배열에 집어넣기
$dest = spacing($dest,11);
$callBack = spacing($callBack,11);
$Caller = spacing($Caller,10);
$rsvTime = spacing($rsvTime,12);
$msg = spacing($msg,80);
// 내용 검사 1
$Error = CheckCommonType($dest, $rsvTime);
if ($Error) return $Error;
if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다";
$this->Data[] = '01144 '.$this->ID.$this->PWD.$dest.$callBack.$Caller.$rsvTime.$msg;
return "";
// 개행치환
$msg = preg_replace("/\r\n/", "\n", $msg);
$msg = preg_replace("/\r/", "\n", $msg);
// 90byte 이내는 SMS, 90 ~ 2000 byte 는 LMS 그 이상은 절삭 되어 LMS로 발송
// SMS 이기 때문에 90byte 이내로 합니다.
$msg=cut_char($msg, 90);
$msg = spacing($msg, 90);
// 한글 깨진것이 있는지 체크합니다.
if( preg_match('/^([\x00-\x7e]|.{2})*/', $msg, $z) ){
$msg = $z[0];
}
// 문자 내용이 euc-kr 인지 체크합니다.
$enc = mb_detect_encoding($msg, array('EUC-KR', 'UTF-8'));
// 문자 내용이 euc-kr 이면 json_encode 에서 깨지기 때문에 utf-8 로 변환합니다.
if($enc === 'EUC-KR'){
$msg = iconv_utf8($msg);
}
// 보낼 내용을 배열에 집어넣기
$dest = spacing($dest,11);
$callBack = spacing($callBack,11);
$Caller = spacing($Caller,10);
$rsvTime = $rsvTime ? spacing($rsvTime,12) : '';
$list = array(
"key" => $this->icode_key,
"tel" => $dest,
"cb" => $callBack,
"msg" => $msg,
"title" => "", //SMS 의 경우 타이틀을 지정할수 없습니다.
"date" => $rsvTime
);
$packet = json_encode($list);
if( !$packet ){ // json_encode가 잘못되었으면 보내지 않습니다.
return "json_encode error";
}
$this->Data[] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet;
return '';
} else {
// 기존 OLD SMS
// 내용 검사 1
$Error = CheckCommonType($dest, $rsvTime);
if ($Error) return $Error;
// 내용 검사 2
//if ( eregi("[^0-9]",$callBack) ) return "회신 전화번호가 잘못되었습니다";
if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다";
$msg=cut_char($msg,80); // 80자 제한
// 보낼 내용을 배열에 집어넣기
$dest = spacing($dest,11);
$callBack = spacing($callBack,11);
$Caller = spacing($Caller,10);
$rsvTime = spacing($rsvTime,12);
$msg = spacing($msg,80);
$this->Data[] = '01144 '.$this->ID.$this->PWD.$dest.$callBack.$Caller.$rsvTime.$msg;
return "";
}
}
function AddURL($dest, $callBack, $URL, $msg, $rsvTime="") {
@@ -121,26 +190,54 @@ class SMS {
return "";
}
function Send () {
$fp=@fsockopen(trim($this->SMS_Server),trim($this->SMS_Port), $errno, $errstr, 2);
if (!$fp) return false;
set_time_limit(60);
function Send() {
global $config;
## php4.3.10일경우
## zend 최신버전으로 업해주세요..
## 또는 122번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요.
// 토큰키를 사용한다면
if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){
$fsocket = @fsockopen(trim($this->socket_host),trim($this->socket_port), $errno, $errstr, 2);
if (!$fsocket) return false;
set_time_limit(300);
foreach($this->Data as $puts) {
$dest = substr($puts,26,11);
fputs($fp,$puts);
while(!$gets) { $gets=fgets($fp,30); }
if (substr($gets,0,19)=="0223 00".$dest) $this->Result[]=$dest.":".substr($gets,19,10);
else $this->Result[$dest]=$dest.":Error";
$gets="";
}
fclose($fp);
$this->Data="";
return true;
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
while(!$gets) { $gets = fgets($fsocket,32); }
$json = json_decode(substr($puts,6), true);
$dest = $json["tel"];
if (substr($gets,0,20) == "0225 00".spacing($dest,12)) {
$this->Result[] = $dest.":".substr($gets,20,11);
} else {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
} else {
$fp=@fsockopen(trim($this->SMS_Server),trim($this->SMS_Port));
if (!$fp) return false;
set_time_limit(300);
## php4.3.10일경우
## zend 최신버전으로 업해주세요..
## 또는 122번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요.
foreach($this->Data as $puts) {
$dest = substr($puts,26,11);
fputs($fp,$puts);
while(!$gets) { $gets=fgets($fp,30); }
if (substr($gets,0,19)=="0223 00".$dest) $this->Result[]=$dest.":".substr($gets,19,10);
else $this->Result[$dest]=$dest.":Error";
$gets="";
}
fclose($fp);
}
$this->Data=array();
return true;
}
}
?>
+1 -1
View File
@@ -31,7 +31,7 @@ function latest($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time=
}
}
$caches = null;
$caches = false;
if(G5_USE_CACHE) {
$cache_file_name = "latest-{$bo_table}-{$skin_dir}-{$rows}-{$subject_len}-".g5_cache_secret_key();
+1 -1
View File
@@ -46,7 +46,7 @@ function create_hash($password, $force_compat = false)
{
// Generate the salt.
if (function_exists('mcrypt_create_iv')) {
if (function_exists('mcrypt_create_iv') && version_compare( PHP_VERSION, '7.2' , '<' ) ) {
$salt = base64_encode(mcrypt_create_iv(PBKDF2_COMPAT_SALT_BYTES, MCRYPT_DEV_URANDOM));
} elseif (@file_exists('/dev/urandom') && $fp = @fopen('/dev/urandom', 'r')) {
$salt = base64_encode(fread($fp, PBKDF2_COMPAT_SALT_BYTES));
+1 -1
View File
@@ -86,7 +86,7 @@ function exist_mb_nick($reg_mb_nick, $reg_mb_id)
function reserve_mb_nick($reg_mb_nick)
{
global $config;
if (preg_match("/[\,]?{$reg_mb_nick}/i", $config['cf_prohibit_id']))
if (preg_match("/[\,]?".preg_quote($reg_mb_nick)."/i", $config['cf_prohibit_id']))
return "이미 예약된 단어로 사용할 수 없는 닉네임 입니다.";
else
return "";
+37 -10
View File
@@ -110,6 +110,8 @@ function get_view_thumbnail($contents, $thumb_width=0)
for($i=0; $i<count($matches[1]); $i++) {
$img = $matches[1][$i];
$img_tag = isset($matches[0][$i]) ? $matches[0][$i] : '';
preg_match("/src=[\'\"]?([^>\'\"]+[^>\'\"]+)/i", $img, $m);
$src = $m[1];
preg_match("/style=[\"\']?([^\"\'>]+)/i", $img, $m);
@@ -161,16 +163,22 @@ function get_view_thumbnail($contents, $thumb_width=0)
}
}
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
continue;
// Animated GIF 체크
$is_animated = false;
if($size[2] == 1) {
$is_animated = is_animated_gif($srcfile);
if($replace_content = run_replace('thumbnail_is_animated_gif_content', '', $contents, $srcfile, $is_animated, $img_tag, $data_path, $size)){
$contents = $replace_content;
continue;
}
}
// 원본 width가 thumb_width보다 작다면
if($size[0] <= $thumb_width)
continue;
// 썸네일 높이
$thumb_height = round(($thumb_width * $size[1]) / $size[0]);
$filename = basename($srcfile);
@@ -190,12 +198,12 @@ function get_view_thumbnail($contents, $thumb_width=0)
} else {
$thumb_tag = '<img src="'.G5_URL.str_replace($filename, $thumb_file, $data_path).'" alt="'.$alt.'"/>';
}
// $img_tag에 editor 경로가 있으면 원본보기 링크 추가
$img_tag = $matches[0][$i];
if(strpos($img_tag, G5_DATA_DIR.'/'.G5_EDITOR_DIR) && preg_match("/\.({$config['cf_image_extension']})$/i", $filename)) {
$imgurl = str_replace(G5_URL, "", $src);
$thumb_tag = '<a href="'.G5_BBS_URL.'/view_image.php?fn='.urlencode($imgurl).'" target="_blank" class="view_image">'.$thumb_tag.'</a>';
$attr_href = run_replace('thumb_view_image_href', G5_BBS_URL.'/view_image.php?fn='.urlencode($imgurl), $filename, '', $width, $height, $alt);
$thumb_tag = '<a href="'.$attr_href.'" target="_blank" class="view_image">'.$thumb_tag.'</a>';
}
$contents = str_replace($img_tag, $thumb_tag, $contents);
@@ -306,8 +314,11 @@ function thumbnail($filename, $source_path, $target_path, $thumb_width, $thumb_h
if(!$thumb_height) {
$thumb_height = round(($thumb_width * $size[1]) / $size[0]);
} else {
if($size[0] < $thumb_width || $size[1] < $thumb_height)
if($crop_mode === 'center' && ($size[0] > $thumb_width || $size[1] > $thumb_height)){
$is_large = true;
} else if($size[0] < $thumb_width || $size[1] < $thumb_height) {
$is_large = false;
}
}
} else {
if($thumb_height) {
@@ -684,8 +695,19 @@ and the roundoff errors in the Gaussian blur process, are welcome.
}
function is_animated_gif($filename) {
if(!($fh = @fopen($filename, 'rb')))
static $cache = array();
$key = md5($filename);
if( isset($cache[$key]) ){
return $cache[$key];
}
if(!($fh = @fopen($filename, 'rb'))){
$cache[$key] = false;
return false;
}
$count = 0;
// 출처 : http://www.php.net/manual/en/function.imagecreatefromgif.php#104473
// an animated gif contains multiple "frames", with each frame having a
@@ -702,6 +724,11 @@ function is_animated_gif($filename) {
}
fclose($fh);
return $count > 1;
$cache[$key] = ($count > 1) ? true : false;
run_event('is_animated_gif_after', $filename, $cache[$key]);
return $cache[$key];
}
?>
+9 -6
View File
@@ -113,15 +113,17 @@ function short_url_clean($string_url, $add_qry=''){
$array_page_names = run_replace('url_clean_page_names', array('board', 'write', 'content'));
if( strpos($string_url, G5_BBS_URL) === false || ! in_array($page_name, $array_page_names) ){ //게시판이 아니면 리턴
if( stripos(preg_replace('/^https?:/i', '', $string_url), preg_replace('/^https?:/i', '', G5_BBS_URL)) === false || ! in_array($page_name, $array_page_names) ){ //게시판이 아니면 리턴
return run_replace('false_short_url_clean', $string_url, $url, $page_name, $array_page_names);
}
$return_url = '';
parse_str($url['query'], $vars);
/*
// 예) Array ( [scheme] => http [host] => sir.kr [path] => /bbs/board.php [query] => wr_id=1110870&bo_table=cm_free&cpage=1 [fragment] => c_1110946 )
//while(list($k,$v) = each($vars)) $page_name .= "/".$v;
foreach($vars as $k => $v) { $page_name .= "/".$v; }
*/
if( $page_name === 'write' ){
$vars['action'] = 'write';
@@ -173,8 +175,8 @@ function short_url_clean($string_url, $add_qry=''){
if( $add_qry ){
$add_param .= $add_param ? '&amp;'.$add_qry : '?'.$add_qry;
}
while(list($k,$v) = each($s)) $return_url .= '/'.$v;
foreach($s as $k => $v) { $return_url .= '/'.$v; }
return $host.$return_url.$add_param.$fragment;
}
@@ -227,7 +229,8 @@ function exist_seo_url($type, $seo_title, $write_table, $sql_id=0){
global $g5;
$exists_title = '';
$sql_id = preg_replace('/[^a-z0-9_]/i', '', $sql_id);
$sql_id = preg_replace('/[^a-z0-9_\-]/i', '', $sql_id);
// 영카트 상품코드의 경우 - 하이픈이 들어가야 함
if( $type === 'bbs' ){
$sql = "select wr_seo_title FROM {$write_table} WHERE wr_seo_title = '".sql_real_escape_string($seo_title)."' AND wr_id <> '$sql_id' limit 1";
+2 -1
View File
@@ -85,6 +85,7 @@
.more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999}
.more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
.more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
.more_opt.is_list_btn{width:90px}
.more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left}
.more_opt li:last-child {border-bottom:0}
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
@@ -299,7 +300,7 @@
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
.bo_vc_w .bo_vc_secret {display:block}
#bo_vc_send_sns {display:block;float:left}
#bo_vc_send_sns {display:block;margin-bottom:10px}
#bo_vc_sns {display:block;margin:0;padding:0;list-style:none;zoom:1}
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
#bo_vc_sns li {float:left;margin:0 5px 0 0}
+1 -1
View File
@@ -143,7 +143,7 @@ jQuery(function($){
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
?>
<li>
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download" download>
<i class="fa fa-download" aria-hidden="true"></i>
<strong><?php echo $view['file'][$i]['source'] ?></strong>
<?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
@@ -22,6 +22,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
$str = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $str);
$c_reply_href = $comment_common_url.'&amp;c_id='.$comment_id.'&amp;w=c#bo_vc_w';
$c_edit_href = $comment_common_url.'&amp;c_id='.$comment_id.'&amp;w=cu#bo_vc_w';
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
?>
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-bottom-color:#f8f8f8"<?php } ?>>
<div class="comment_inner">
@@ -37,6 +38,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<?php
include(G5_SNS_PATH."/view_comment_list.sns.skin.php");
?>
<?php if( $is_comment_reply_edit ){ ?>
<div class="bo_vl_opt">
<button type="button" class="btn_cm_opt btn_b03 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
<ul class="bo_vc_act">
@@ -45,6 +47,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
</ul>
</div>
<?php } ?>
<script>
$(function() {
// 댓글 옵션창 열기
+1 -1
View File
@@ -76,7 +76,7 @@ add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0
<?php if ($is_email) { ?>
<div class="write_div">
<label for="wr_email" class="sound_only">이메일</label>
<input type="email" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input full_input" email" maxlength="100" placeholder="이메일">
<input type="email" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input full_input" maxlength="100" placeholder="이메일">
</div>
<?php } ?>
+1 -1
View File
@@ -99,7 +99,7 @@ add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0
$img_content = '<span class="no_img"><i class="fa fa-picture-o" aria-hidden="true"></i></span>';
}
echo $img_content;
echo run_replace('thumb_image_tag', $img_content, $thumb);
}
?>
</a>
+3 -2
View File
@@ -74,6 +74,7 @@
.more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999}
.more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
.more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
.more_opt.is_list_btn{width:90px}
.more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left}
.more_opt li:last-child {border-bottom:0}
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
@@ -157,7 +158,7 @@
#bo_gall .gall_li_wr {position:relative;}
#bo_gall .gall_li_chk {display:inline-block;position:absolute;top:10px;left:10px}
#bo_gall .gall_li:nth-child(2n+1) {clear:both}
#bo_gall .gall_li .gall_img img{width:100%;height:auto}
#bo_gall .gall_li .gall_img img, #bo_gall .gall_li .gall_img video{width:100%;height:auto}
#bo_gall .gall_li .gall_img .no_img,
#bo_gall .gall_li .gall_notice {display:block;background:#eaeaea;color:#d0d0d0;font-size:3em;text-align:center;padding:25% 0}
@@ -331,7 +332,7 @@
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
.bo_vc_w .bo_vc_secret {display:block}
#bo_vc_send_sns {display:block;float:left}
#bo_vc_send_sns {display:block;margin-bottom:10px}
#bo_vc_sns {display:block;margin:0;padding:0;list-style:none;zoom:1}
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
#bo_vc_sns li {float:left;margin:0 5px 0 0}
+1 -1
View File
@@ -145,7 +145,7 @@ jQuery(function($){
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
?>
<li>
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download" download>
<i class="fa fa-download" aria-hidden="true"></i>
<strong><?php echo $view['file'][$i]['source'] ?></strong>
<?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
@@ -22,6 +22,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
$str = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $str);
$c_reply_href = $comment_common_url.'&amp;c_id='.$comment_id.'&amp;w=c#bo_vc_w';
$c_edit_href = $comment_common_url.'&amp;c_id='.$comment_id.'&amp;w=cu#bo_vc_w';
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
?>
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-bottom-color:#f8f8f8"<?php } ?>>
<div class="comment_inner">
@@ -37,6 +38,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<?php
include(G5_SNS_PATH."/view_comment_list.sns.skin.php");
?>
<?php if( $is_comment_reply_edit ){ ?>
<div class="bo_vl_opt">
<button type="button" class="btn_cm_opt btn_b03 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
<ul class="bo_vc_act">
@@ -45,6 +47,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
</ul>
</div>
<?php } ?>
<script>
$(function() {
// 댓글 옵션창 열기

Some files were not shown because too many files have changed in this diff Show More