CSRF 제로보드의 보안책 정보
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;
- }
추천
2
2
댓글 7개

공지에도 알려드렸듯이 토큰은 무용지물 입니다.
접근할 수 있는 모든 페이지는 모두 공격 대상이 됩니다.
이미 여러 프로그램에서 확인한 사항이기도 합니다.
현재로서는 captcha 의 적용이 최선책으로 확인 되었습니다.
즉 사람이 개입 되어야 안전하다는 결론입니다.
접근할 수 있는 모든 페이지는 모두 공격 대상이 됩니다.
이미 여러 프로그램에서 확인한 사항이기도 합니다.
현재로서는 captcha 의 적용이 최선책으로 확인 되었습니다.
즉 사람이 개입 되어야 안전하다는 결론입니다.
구멍뚫린 토큰은 이미 없어졌쟎아요? 요즘에는 모두 RF로 된 교통카드를 써요. ㅋㅋ

불당님 쎈스쟁이 ㅡ.ㅡㅋ

RF가 뭔가 했습니다. 엄청난 쎈스 ;;

제로도 숭숭 다 뚫립니다.

저번 뉴스보니까 구글(captcha)도 뚫렸다고 하더군요.
어차피 중간에 패킷을 가로채는 것이니
그 것을 보안하기 위해 reCaptcha 가 나왔다고 하더군요.
어차피 중간에 패킷을 가로채는 것이니
그 것을 보안하기 위해 reCaptcha 가 나왔다고 하더군요.
비회원의 경우엔 reCaptcha로만 바꿔도 꽤 효과가 클 것 같아요.
먼저 캐차에 값을 입력하고 확인 버튼을 누르면,
시스템에 접속해서 임의로 다른 값을 가지고 오고,
그것을 입력해야 글쓰기가 가능하게 되니까요.
물론 비회원은 귀챦지만 그정도는 어쩔 수 없다고 봅니다.
관리자님. reCaptcha 스타일로 바꿔주세요~!!!
숫자를 넣고 확인 누르면 새로운 숫자가 나오고 그거로 인증하게요.
먼저 캐차에 값을 입력하고 확인 버튼을 누르면,
시스템에 접속해서 임의로 다른 값을 가지고 오고,
그것을 입력해야 글쓰기가 가능하게 되니까요.
물론 비회원은 귀챦지만 그정도는 어쩔 수 없다고 봅니다.
관리자님. reCaptcha 스타일로 바꿔주세요~!!!
숫자를 넣고 확인 누르면 새로운 숫자가 나오고 그거로 인증하게요.