Compare commits

...
3 Commits
Author SHA1 Message Date
chicpro 0742c5f81b 댓글 wr_name 이용한 XSS 보안 취약점 수정 2014-07-30 18:05:52 +09:00
chicpro d5e6a07dda xss 대응 코드 추가 2014-07-29 16:33:19 +09:00
chicpro e84a1c8c98 그누보드 5.0.9 패치 적용 2014-07-28 11:41:12 +09:00
18 changed files with 42 additions and 31 deletions
+2 -2
View File
@@ -708,7 +708,7 @@ $frm_submit .= '</div>';
<tr>
<th scope="row"><label for="bo_comment_min">최소 댓글수 제한</label></th>
<td>
<?php echo help('댓글 입력시 최소 글자수, 최대 글자수를 설정. 0을 입력하면 검사하지 않음') ?>
<?php echo help('댓글 입력시 최소 글자수를 설정. 0을 입력하면 검사하지 않음') ?>
<input type="text" name="bo_comment_min" value="<?php echo $board['bo_comment_min'] ?>" id="bo_comment_min" class="numeric frm_input" size="4">
</td>
<td class="td_grpset">
@@ -721,7 +721,7 @@ $frm_submit .= '</div>';
<tr>
<th scope="row"><label for="bo_comment_max">최대 댓글수 제한</label></th>
<td>
<?php echo help('댓글 입력시 최소 글자수, 최대 글자수를 설정. 0을 입력하면 검사하지 않음') ?>
<?php echo help('댓글 입력시 최대 글자수를 설정. 0을 입력하면 검사하지 않음') ?>
<input type="text" name="bo_comment_max" value="<?php echo $board['bo_comment_max'] ?>" id="bo_comment_max" class="numeric frm_input" size="4">
</td>
<td class="td_grpset">
+1 -1
View File
@@ -8,7 +8,7 @@ if (G5_IS_MOBILE) {
} else {
echo stripslashes($qaconfig['qa_mobile_content_tail']);
if($qaconfig['qa_include_tail'])
@include ($qaconfig['bo_include_tail']);
@include ($qaconfig['qa_include_tail']);
else
include ('./_tail.php');
}
+1 -1
View File
@@ -361,7 +361,7 @@ if ($w == '' || $w == 'r') {
// 쓰기 포인트 부여
if ($w == '') {
if ($notice) {
$bo_notice = $wr_id.",".$board['bo_notice'];
$bo_notice = $wr_id.($board['bo_notice'] ? ",".$board['bo_notice'] : '');
sql_query(" update {$g5['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}' ");
}
+7 -4
View File
@@ -35,7 +35,10 @@ function g5_path()
$port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
$http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
$user = str_replace(str_replace($document_root, '', $_SERVER['SCRIPT_FILENAME']), '', $_SERVER['SCRIPT_NAME']);
$result['url'] = $http.$_SERVER['SERVER_NAME'].$port.$user.$root;
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
if(isset($_SERVER['HTTP_HOST']) && preg_match('/:[0-9]+$/', $host))
$host = preg_replace('/:[0-9]+$/', '', $host);
$result['url'] = $http.$host.$port.$user.$root;
return $result;
}
@@ -327,7 +330,7 @@ if (isset($_REQUEST['wr_id'])) {
}
if (isset($_REQUEST['bo_table'])) {
$bo_table = trim($_REQUEST['bo_table']);
$bo_table = preg_replace('/[^a-z0-9_]/i', '', trim($_REQUEST['bo_table']));
$bo_table = substr($bo_table, 0, 20);
} else {
$bo_table = '';
@@ -335,7 +338,7 @@ if (isset($_REQUEST['bo_table'])) {
// URL ENCODING
if (isset($_REQUEST['url'])) {
$url = trim($_REQUEST['url']);
$url = strip_tags(trim($_REQUEST['url']));
$urlencode = urlencode($url);
} else {
$url = '';
@@ -348,7 +351,7 @@ if (isset($_REQUEST['url'])) {
if (isset($_REQUEST['gr_id'])) {
if (!is_array($_REQUEST['gr_id'])) {
$gr_id = trim($_REQUEST['gr_id']);
$gr_id = preg_replace('/[^a-z0-9_]/i', '', trim($_REQUEST['gr_id']));
}
} else {
$gr_id = '';
@@ -23,7 +23,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
?>
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
<header>
<h1><?php echo $list[$i]['wr_name'] ?>님의 댓글</h1>
<h1><?php echo get_text($list[$i]['wr_name']); ?>님의 댓글</h1>
<?php echo $list[$i]['name'] ?>
<?php if ($cmt_depth) { ?><img src="<?php echo $board_skin_url ?>/img/icon_reply.gif" alt="댓글의 댓글" class="icon_reply"><?php } ?>
<?php if ($is_ip_view) { ?>
@@ -23,7 +23,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
?>
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
<header>
<h1><?php echo $list[$i]['wr_name'] ?>님의 댓글</h1>
<h1><?php echo get_text($list[$i]['wr_name']); ?>님의 댓글</h1>
<?php echo $list[$i]['name'] ?>
<?php if ($cmt_depth) { ?><img src="<?php echo $board_skin_url ?>/img/icon_reply.gif" alt="댓글의 댓글" class="icon_reply"><?php } ?>
<?php if ($is_ip_view) { ?>
@@ -52,10 +52,10 @@ add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">',
<tr>
<th scope="row"><label for="reg_mb_name">이름<strong class="sound_only">필수</strong></label></th>
<td>
<?php if ($w=="u" && $config['cf_cert_use']) { ?>
<?php if ($config['cf_cert_use']) { ?>
<span class="frm_info">아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다.</span>
<?php } ?>
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php if ($w=='u') echo 'readonly'; ?> class="frm_input nospace <?php echo $required ?> <?php echo $readonly ?>">
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php echo $readonly; ?> class="frm_input <?php echo $required ?> <?php echo $readonly ?>">
<?php
if($config['cf_cert_use']) {
if($config['cf_cert_ipin'])
+3 -3
View File
@@ -38,7 +38,7 @@ function editor_html($id, $content, $is_dhtml_editor=true)
}
$smarteditor_class = $is_dhtml_editor ? "smarteditor2" : "";
$html .= "\n<textarea id=\"$id\" name=\"$id\" class=\"$smarteditor_class\" maxlength=\"65536\">$content</textarea>";
$html .= "\n<textarea id=\"$id\" name=\"$id\" class=\"$smarteditor_class\" maxlength=\"65536\" style=\"width:100%\">$content</textarea>";
$html .= "\n<span class=\"sound_only\">웹 에디터 끝</span>";
return $html;
}
@@ -48,7 +48,7 @@ function editor_html($id, $content, $is_dhtml_editor=true)
function get_editor_js($id, $is_dhtml_editor=true)
{
if ($is_dhtml_editor) {
return "var {$id}_editor_data = oEditors.getById['{$id}'].getIR();\noEditors.getById['{$id}'].exec('UPDATE_CONTENTS_FIELD', []);\n";
return "var {$id}_editor_data = oEditors.getById['{$id}'].getIR();\noEditors.getById['{$id}'].exec('UPDATE_CONTENTS_FIELD', []);\nif(jQuery.inArray(document.getElementById('{$id}').value.toLowerCase().replace(/^\s*|\s*$/g, ''), ['&nbsp;','<p>&nbsp;</p>','<p><br></p>','<div><br></div>','<p></p>','<br>','']) != -1){document.getElementById('{$id}').value='';}\n";
} else {
return "var {$id}_editor = document.getElementById('{$id}');\n";
}
@@ -59,7 +59,7 @@ function get_editor_js($id, $is_dhtml_editor=true)
function chk_editor_js($id, $is_dhtml_editor=true)
{
if ($is_dhtml_editor) {
return "if (!{$id}_editor_data || {$id}_editor_data == '&nbsp;' || {$id}_editor_data == '<p>&nbsp;</p>' || {$id}_editor_data == '<p><br></p>' || {$id}_editor_data == '<p></p>') { alert(\"내용을 입력해 주십시오.\"); oEditors.getById['{$id}'].exec('FOCUS'); return false; }\n";
return "if (!{$id}_editor_data || jQuery.inArray({$id}_editor_data.toLowerCase(), ['&nbsp;','<p>&nbsp;</p>','<p><br></p>','<p></p>','<br>']) != -1) { alert(\"내용을 입력해 주십시오.\"); oEditors.getById['{$id}'].exec('FOCUS'); return false; }\n";
} else {
return "if (!{$id}_editor.value) { alert(\"내용을 입력해 주십시오.\"); {$id}_editor.focus(); return false; }\n";
}
@@ -6851,8 +6851,10 @@ nhn.husky.SE_EditingArea_WYSIWYG = jindo.$Class({
// --[SMARTEDITORSUS-875]
var sContent,
oNavigator = this.oApp.oNavigator,
bUnderIE11 = oNavigator.ie && document.documentMode < 11, // IE11미만
oNavigator = this.oApp.oNavigator,
tmp_htBrowser = jindo.$Agent().navigator(),
//bUnderIE11 = oNavigator.ie && document.documentMode < 11, // IE11미만
bUnderIE11 = oNavigator.ie && tmp_htBrowser.nativeVersion < 11, // IE11미만
sCursorHolder = bUnderIE11 ? "" : "<br>";
if(this.oApp.applyConverter){
File diff suppressed because one or more lines are too long
@@ -32,7 +32,8 @@ nhn.husky.SE2M_AttachQuickPhoto = jindo.$Class({
*/
$ON_ATTACHPHOTO_OPEN_WINDOW : function(){
this.htPopupOption.sUrl = this.makePopupURL();
this.htPopupOption.sProperties = "left=0,top=0,width=640,height=459,scrollbars=yes,location=no,status=0,resizable=no";
//this.htPopupOption.sProperties = "left=0,top=0,width=640,height=459,scrollbars=yes,location=no,status=0,resizable=no";
this.htPopupOption.sProperties = "left="+(screen.width-640)/2+", top="+(screen.height-459)/2+",width=640,height=459,scrollbars=yes,location=no,status=0,resizable=no";
this.oPopupWindow = this.oPopupMgr.openWindow(this.htPopupOption);
@@ -152,7 +152,7 @@ jQuery(function ($) {
_done : function(e, data){
var othis = this;
$.each(data.result.files, function (index, file) {
if (file.url) {
if (file.url && !file.error) {
var ret = othis.get_ratio( file.width, file.height ),
node = $(data.context.children()[index]),
size_text = file.width+" x "+file.height,
@@ -1086,6 +1086,9 @@ class UploadHandler
$image_width_height = $this->get_image_size($file_path);
$file->width = $image_width_height[0];
$file->height = $image_width_height[1];
} else { //로빈아빠님이 알려주심, 이미지 업로드 체크
unlink($file_path);
$file->error = $this->get_error_message('accept_file_types');
}
} else {
$file->size = $file_size;
+3 -7
View File
@@ -1,14 +1,10 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css" rel="stylesheet" />', 0);
add_stylesheet('<link type="text/css" href="'.G5_PLUGIN_URL.'/jquery-ui/style.css">', 0);
?>
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css" rel="stylesheet" />
<style>
.ui-datepicker { font:12px dotum; }
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 70px;}
.ui-datepicker-trigger { margin:0 0 -5px 2px; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js"></script>
<script>
jQuery(function($){
+6
View File
@@ -0,0 +1,6 @@
@charset "utf-8";
.ui-datepicker { font:12px dotum; }
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 70px;}
.ui-datepicker-trigger { margin:0 0 -5px 2px; }
+1 -1
View File
@@ -29,7 +29,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
<header style="z-index:<?php echo $cmt_sv; ?>">
<h1><?php echo $list[$i]['wr_name'] ?>님의 댓글</h1>
<h1><?php echo get_text($list[$i]['wr_name']); ?>님의 댓글</h1>
<?php echo $list[$i]['name'] ?>
<?php if ($cmt_depth) { ?><img src="<?php echo $board_skin_url ?>/img/icon_reply.gif" class="icon_reply" alt="댓글의 댓글"><?php } ?>
<?php if ($is_ip_view) { ?>
+1 -1
View File
@@ -29,7 +29,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
<header style="z-index:<?php echo $cmt_sv; ?>">
<h1><?php echo $list[$i]['wr_name'] ?>님의 댓글</h1>
<h1><?php echo get_text($list[$i]['wr_name']); ?>님의 댓글</h1>
<?php echo $list[$i]['name'] ?>
<?php if ($cmt_depth) { ?><img src="<?php echo $board_skin_url ?>/img/icon_reply.gif" class="icon_reply" alt="댓글의 댓글"><?php } ?>
<?php if ($is_ip_view) { ?>
+2 -2
View File
@@ -57,10 +57,10 @@ add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">',
<tr>
<th scope="row"><label for="reg_mb_name">이름<strong class="sound_only">필수</strong></label></th>
<td>
<?php if ($w=="u" && $config['cf_cert_use']) { ?>
<?php if ($config['cf_cert_use']) { ?>
<span class="frm_info">아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다.</span>
<?php } ?>
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php if ($w=='u') echo 'readonly'; ?> class="frm_input nospace <?php echo $required ?> <?php echo $readonly ?>" size="10">
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php echo $readonly; ?> class="frm_input <?php echo $required ?> <?php echo $readonly ?>" size="10">
<?php
if($config['cf_cert_use']) {
if($config['cf_cert_ipin'])