본문으로 건너뛰기

고도몰 쇼핑몰 보안 강화

PHP 7 · GODO25
변경 파일 수: 6개
변경 파일 목록
6
변경 파일 코드
추가삭제
Component/Board/Board.php+2-1
변경 전Board.php
protected function xssClean($data)
{
 
$onevents = 'onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload|ontoggle|onpageshow|onrepeat|onprogress|onbegin|onpointerdown|onauxclick|onpointerenter|onend|onsearch';
 
$data = preg_replace('#([\x00-\x20"\'/])(?:'.$onevents.'|xmlns)[^>]*+>#iu', '$1>', $data);
 
// Remove javascript: and vbscript: protocols
 
변경 후Board.php
protected function xssClean($data)
{
 
// 이벤트 핸들러 목록은 StringUtils 단일소스 사용 (목록 드리프트 방지)
$onevents = StringUtils::getXssEventHandlers();
$data = preg_replace('#([\x00-\x20"\'/])(?:'.$onevents.'|xmlns)[^>]*+>#iu', '$1>', $data);
 
// Remove javascript: and vbscript: protocols
 
Controller/Admin/Promotion/PollDetailViewController.php+2-5
변경 전PollDetailViewController.php
use Component\Promotion\Poll;
use Component\Page\Page;
use Exception;
 
use Request;
/**
$resData = [];
foreach ($resultData as $key => $value) {
if (in_array($key, $range) === false) continue;
$decData = json_decode(stripslashes($value[$getValue['type']]), true);
if (is_array($decData) === true) {
foreach ($decData as $k => $v) {
if ($k == $getValue['detail']) {
$resData[] = $v;
}
}
}
//array_filter 로 인하여 빈값,0,null 값 filter 처리 -> 빈값, 0으로 대답한 경우 삭제됨
$resData = array_values($resData);
$total = count($resData);
$max = ($total - ($pageNum*($currentPage - 1))) - 1;
$min = $max - $pageNum + 1;
$range = range($min,$max);
$page = \App::load('\\Component\\Page\\Page', $currentPage);
$page->page['list'] = $pageNum; // 페이지당 리스트 수
 
변경 후PollDetailViewController.php
use Component\Promotion\Poll;
use Component\Page\Page;
use Exception;
use Framework\Utility\StringUtils;
use Request;
/**
$resData = [];
foreach ($resultData as $key => $value) {
 
$decData = json_decode(stripslashes($value[$getValue['type']]), true);
if (is_array($decData) === true) {
foreach ($decData as $k => $v) {
if ($k == $getValue['detail']) {
$resData[] = StringUtils::htmlSpecialChars($v);
}
}
}
//array_filter 로 인하여 빈값,0,null 값 filter 처리 -> 빈값, 0으로 대답한 경우 삭제됨
$resData = array_values($resData);
$total = count($resData);
 
 
 
$page = \App::load('\\Component\\Page\\Page', $currentPage);
$page->page['list'] = $pageNum; // 페이지당 리스트 수
 
Controller/Front/Service/PollResultController.php+4-1
변경 전PollResultController.php
use Component\Promotion\Poll;
use Framework\Debug\Exception\AlertBackException;
 
use Request;
class PollResultController extends \Controller\Front\Controller
foreach ($item['itemAnswerType'] as $key => $val) {
if (empty(isset($result[$key])) === false) {
if ($val == 'sub') {
if (count($sortData[$key]) < 20 && $result[$key]) $sortData[$key][] = $result[$key];
 
 
} else {
foreach ($item['itemAnswer'][$key] as $_key => $_value) {
if ($item['itemResponseType'][$key] == 'radio') {
 
변경 후PollResultController.php
use Component\Promotion\Poll;
use Framework\Debug\Exception\AlertBackException;
use Framework\Utility\StringUtils;
use Request;
class PollResultController extends \Controller\Front\Controller
foreach ($item['itemAnswerType'] as $key => $val) {
if (empty(isset($result[$key])) === false) {
if ($val == 'sub') {
if (count($sortData[$key]) < 20 && $result[$key]) {
$sortData[$key][] = StringUtils::htmlSpecialChars($result[$key]);
}
} else {
foreach ($item['itemAnswer'][$key] as $_key => $_value) {
if ($item['itemResponseType'][$key] == 'radio') {
 
data/skin/mobile/moment/board/report.html+5-5
변경 전report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
<input type="hidden" name="memoWriterId" value="{=memo.writerId}"/>
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerId = $('#frmMemberReportWrite').find('input[name=writerId]').val();
var memoWriterId = $('#frmMemberReportWrite').find('input[name=memoWriterId]').val();
 
if (memoSno > 0) { // 댓글을 작성한 경우
writerId = memoWriterId;
}
if (!writerId) { // 피신고자가 비회원인 경우
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {
 
변경 후report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
 
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerMemNo = $('#frmMemberReportWrite').find('input[name=writerMemNo]').val();
var memoWriterMemNo = $('#frmMemberReportWrite').find('input[name=memoWriterMemNo]').val();
var targetMemNo = writerMemNo; // 기본: 게시글 작성자 회원번호
if (memoSno > 0) { // 댓글을 작성한 경우
targetMemNo = memoWriterMemNo; // 댓글 작성자 회원번호
}
if (!targetMemNo || targetMemNo <= 0) { // 피신고자가 비회원인 경우
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {
 
data/skin/mobile/mygreek/board/report.html+5-5
변경 전report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
<input type="hidden" name="memoWriterId" value="{=memo.writerId}"/>
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerId = $('#frmMemberReportWrite').find('input[name=writerId]').val();
var memoWriterId = $('#frmMemberReportWrite').find('input[name=memoWriterId]').val();
 
if (memoSno > 0) { // 댓글을 작성한 경우
writerId = memoWriterId;
}
if (!writerId) { // 피신고자가 비회원인 경우
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {
 
변경 후report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
 
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerMemNo = $('#frmMemberReportWrite').find('input[name=writerMemNo]').val();
var memoWriterMemNo = $('#frmMemberReportWrite').find('input[name=memoWriterMemNo]').val();
var targetMemNo = writerMemNo; // 기본: 게시글 작성자 회원번호
if (memoSno > 0) { // 댓글을 작성한 경우
targetMemNo = memoWriterMemNo; // 댓글 작성자 회원번호
}
if (!targetMemNo || targetMemNo <= 0) { // 피신고자가 비회원인 경우
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {
 
data/skin/mobile/story_g/board/report.html+5-5
변경 전report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
<input type="hidden" name="memoWriterId" value="{=memo.writerId}"/>
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerId = $('#frmMemberReportWrite').find('input[name=writerId]').val();
var memoWriterId = $('#frmMemberReportWrite').find('input[name=memoWriterId]').val();
 
if (memoSno > 0) { // 댓글을 작성한 경우
writerId = memoWriterId;
}
if (!writerId) { // 피신고자가 비회원인 경우 회원 신고 및 차단 불가
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {
 
변경 후report.html
<input type="hidden" name="bdId" value="{=req.bdId}"/>
<input type="hidden" name="bdSno" value="{=req.bdSno}"/>
<input type="hidden" name="memId" value="{=memId}"/>
 
<input type="hidden" name="memoWriterMemNo" value="{=memo.memNo}"/>
<input type="hidden" name="writerMemNo" value="{=writerMemNo}"/>
<input type="hidden" name="writerId" value="{=writerId}"/>
// 회원 신고차단탭 노출
function memberReportOn() {
var memoSno = $('#frmMemberReportWrite').find('input[name=memoSno]').val()
var writerMemNo = $('#frmMemberReportWrite').find('input[name=writerMemNo]').val();
var memoWriterMemNo = $('#frmMemberReportWrite').find('input[name=memoWriterMemNo]').val();
var targetMemNo = writerMemNo; // 기본: 게시글 작성자 회원번호
if (memoSno > 0) { // 댓글을 작성한 경우
targetMemNo = memoWriterMemNo; // 댓글 작성자 회원번호
}
if (!targetMemNo || targetMemNo <= 0) { // 피신고자가 비회원인 경우
alert("회원 신고 및 차단이 불가한 회원입니다.");
} else {
if ($('#frmWrite').find('#reportMemo').val()) {