테스트 : 현재 이 게시판은 게시물에 댓글을 작성하거나 추천을 해야 첨부파일을 다운로드 할 수 있도록 적용 중입니다.
꾸준히 업데이트 하신 분은 링크 게시물의 업데이트 한 버전을 확인하여 2008/09/02 (4478) 이후 버전이면 업데이트가 필요 없습니다.
/?document_srl=207341
또한 zbxe 1.0.6 버전 부터는 이 패치를 적용할 필요가 없습니다.
파일을 다운받으시고 압축을 푸시면 func.inc.php 라는 파일이 나타납니다.
이 파일을 사용하시는 XE의 config 디렉토리에 있는 func.inc.php 파일위로 덮어쓰시면 패치는 완료됩니다.
다만 혹시 소스코드를 수정하셨거나 버전이 낮아서 문제가 있을 수 있으니 덮어쓰기 전에 config/func.inc.php 파일을 백업해 놓으세요.
그리고 다음과 같이 직접 수정하시면 됩니다.
config/func.inc.php 파일의 402번째줄부터 있는 removeHackTabk(), removeJsEvent(), removeSrcHack() 함수를 다음과 같은 코드로 바꾸시면 됩니다.
/?document_srl=207341
또한 zbxe 1.0.6 버전 부터는 이 패치를 적용할 필요가 없습니다.
파일을 다운받으시고 압축을 푸시면 func.inc.php 라는 파일이 나타납니다.
이 파일을 사용하시는 XE의 config 디렉토리에 있는 func.inc.php 파일위로 덮어쓰시면 패치는 완료됩니다.
다만 혹시 소스코드를 수정하셨거나 버전이 낮아서 문제가 있을 수 있으니 덮어쓰기 전에 config/func.inc.php 파일을 백업해 놓으세요.
그리고 다음과 같이 직접 수정하시면 됩니다.
config/func.inc.php 파일의 402번째줄부터 있는 removeHackTabk(), removeJsEvent(), removeSrcHack() 함수를 다음과 같은 코드로 바꾸시면 됩니다.
/config/func.inc.phpXE CSRF 보안취약점 패치
/** * @brief iframe, script코드 제거 **/ function removeHackTag($content) { // iframe 제거 $content = preg_replace("!<iframe(.*?)<\/iframe>!is", '', $content); // script code 제거 $content = preg_replace("!<script(.*?)<\/script>!is", '', $content); // meta 태그 제거 $content = preg_replace("!<meta(.*?)>!is", '', $content); // style 태그 제거 $content = preg_replace("!<style(.*?)<\/style>!is", '', $content); // XSS 사용을 위한 이벤트 제거 $content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content); /** * 이미지나 동영상등의 태그에서 src에 관리자 세션을 악용하는 코드를 제거 * - 취약점 제보 : 김상원님 **/ $content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeSrcHack, $content); return $content; } function removeJSEvent($matches) { $tag = strtolower($matches[1]); if(preg_match('/(src|href)=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/(src|href)=("|\'?)javascript:/i','$1=$2_javascript:', $matches[0]); return preg_replace('/ on([a-z]+)=/i',' _on$1=',$matches[0]); } function removeSrcHack($matches) { $tag = strtolower(trim($matches[1])); $buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0])); $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($buff); // src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴 $src = $xml_doc->{$tag}->attrs->src; $dynsrc = $xml_doc->{$tag}->attrs->dynsrc; if(_isHackedSrc($src) || _isHackedSrc($dynsrc) ) return sprintf("<%s>",$tag); return $matches[0]; } function _isHackedSrc($src) { if(!$src) return false; if($src && preg_match('/javascript:/i',$src)) return true; if($src) { $url_info = parse_url($src); $query = $url_info['query']; $queries = explode('&', $query); $cnt = count($queries); for($i=0;$i<$cnt;$i++) { $pos = strpos($queries[$i],'='); if($pos === false) continue; $key = strtolower(trim(substr($queries[$i], 0, $pos))); $val = strtolower(trim(substr($queries[$i] ,$pos+1))); if(($key == 'module' && $val == 'admin') || $key == 'act' && preg_match('/admin/i',$val)) return true; } } return false; }
현재평점 0 (평가자 수 : 0)
여기에서 행복한 시간 되십시오.
최근 수정일 : 2008-09-03 02:10:16 - 백성찬(白星燦)