퍼스트몰에서 알려 드립니다.
2021.07.28
안녕하세요. 가비아 퍼스트몰입니다.
퍼스트몰 3.0 보안 패치 안내 드립니다.
쇼핑몰의 보안을 위해 필히 진행하여 주시기 바랍니다.
■ 대상: 퍼스트몰 3.0 독립몰 수동패치 쇼핑몰 (자동패치 쇼핑몰은 7월 28일 패치가 진행 되었습니다.)
■ 내용: SQL injection 방어 및 관리자 세션 체크에 대한 패치 (아래 내용을 참고하여 주시기 바랍니다.)
1. _init.php
[수정전]
function replaceChildData($data){
if(is_array($data)){
foreach($data as $k=>$v){
if(is_array($v)){
$tmpData[$k] = replaceChildData($v);
}else{
$tmpData[$k] = preg_replace("/<script>.*<\/script>/s", "", $v);
}
}
}else{
$tmpData = preg_replace("/<script>.*<\/script>/s", "", $data);
}
return $tmpData;
}
[수정후]
function replaceChildData($data){
// sqlinjection - eregi_pattern 체킹 추가 by hyem 21.07.26
$eregi_pattern = "\<script|delete[[:space:]]+from|drop[[:space:]]+database|drop[[:space:]]+table|drop[[:space:]]+column|drop[[:space:]]+procedure|create[[:space:]]+table|union[[:space:]]+all|union[[:space:]]+select|update.+set.+=|insert[[:space:]]+into.+values|select.+from|bulk[[:space:]]+insert|or.+1[[:space:]]*=[[:space:]]1|alter[[:space:]]+table|into[[:space:]]+outfile|\/\*|\*\/|sleep\([0-9]+\)";
if(is_array($data)){
foreach($data as $k=>$v){
if(is_array($v)){
$tmpData[$k] = replaceChildData($v);
}else{
$tmpData[$k] = preg_replace("/<script>.*<\/script>/s", "", $v);
if( preg_match('/'.$eregi_pattern.'/i',$v) ){
echo "<script language='javascript'>\n";
echo "alert('유효하지 않은 문자가 체크되었습니다.');\n";
echo "history.back();\n";
echo "</script>\n";
exit;
}
}
}
}else{
$tmpData = preg_replace("/<script>.*<\/script>/s", "", $data);
if( preg_match('/'.$eregi_pattern.'/i',$data) ){
echo "<script language='javascript'>\n";
echo "alert('유효하지 않은 문자가 체크되었습니다.');\n";
echo "history.back();\n";
echo "</script>\n";
exit;
}
}
return $tmpData;
}
2. /manager/process.php
[수정전]
require_once $dir."/_init.php";
[수정후]
require_once $dir."/_init.php";
$js = new javascripts();
[수정전]
$js = new javascripts();
$url = $_SERVER["HTTP_REFERER"];
[수정후]
if(count($_SESSION['admin']) < 1) {
$js->pageRedirect("/admin/", '세션정보가 없습니다. 로그인 하시기 바랍니다.', 'top');
die();
}
$url = $_SERVER["HTTP_REFERER"];
TOP