팁/튜토리얼

제가 문제를 일으킨 코드를 걸러내는 애드온입니다.

2015.10.15 17:41
824
5

soo_replace_content.zip 를 다운 받으셔서 압축을 푸신 후 애드온으로 설치하시면 됩니다.

기능은 단순합니다.

 

기능1

/\<img[^>]+src\=[^>]+act=(disp|proc)[^>]+\>/im 구문이 <span class="misol_dummy"></span> 로 치환됩니다. 공백이 아닌 이유는 공백이 되면서 새로운 CSRF 코드가 완성될 수도 있기 때문입니다.

 

기능2

알려진 브라우저 ACCEPT 헤더를 가진 브라우저에서 해당 코드가 있는 페이지를 방문하더라도 실제 실행되지 않도록 했습니다.

 

사용권

사용권은 MIT 라이선스를 따릅니다.

 

애드온 코드를 아래 첨부합니다.

<?php
/**
 * @file soo_replace_content.addon.php
 * @author MinSoo Kim <misol.kr@gmail.com>
 * @brief Replace image tag CSRF text.
 */
// Stop if non-logged-in user is
if(!defined('__XE__')) exit();

/**
 * Replace content
 * */
if(($this->act === 'procBoardInsertDocument' || $this->act === 'procBoardInsertComment' || $this->act === 'procTextyleInsertComment') && $called_position == 'before_module_init' && is_string(Context::get('content')))
{
    $board_content = '';
    $board_content = strval(Context::get('content'));
    $board_content = preg_replace("/\<img[^>]+src\=[^>]+act=(disp|proc)[^>]+\>/im", '<span class="misol_dummy"></span>', $board_content);
    Context::set('content', $board_content);
}

/**
 * if XE is requested... with img tag close.
**/
if((stripos($this->act, 'proc') !== FALSE || stripos($this->act, 'disp') !== FALSE) && $called_position == 'before_module_init')
{
    $http_img_accept_headers = array(
        'image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5', // InternetExplorer IMG
        'image/png,image/svg+xml,image/jxr,image/*;q=0.8,*/*;q=0.5', // InternetExplorer 11, MS Edge IMG
        'image/png,image/*;q=0.8,*/*;q=0.5', // FireFox IMG
        'image/webp,*/*;q=0.8', //Chrome IMG
        'image/webp,image/*,*/*;q=0.8', //Chrome IMG

        'audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6;*/*;q=0.5', // FireFox VIDEO
        'video/webm,video/ogg,video/*;q=0.9,application/ogg=0.7,audio/*;q=0.6;*/*;q=0.5' //FireFox AUDIO
    );

    if(in_array(str_replace(array(' ','    '),array('',''),$_SERVER['HTTP_ACCEPT']), $http_img_accept_headers))
    {
        Context::close();
        exit();
    }
}
?>

 

댓글 26

  • 2015.10.15 17:45 #25954
    // Stop if non-logged-in user is 는 잘못 들어간 주석..
  • 2015.10.15 17:58 #25990
    비슷한 예로.. iframe을 이용한 공격도 가능할 수 잇지 않을까요?
  • 2015.10.15 23:57 #26251
    일단 아이프레임은 어느 정도 거르는 것 같아서 괜찮을거라 생각했어요 @_@
  • 2015.10.15 17:46 #25957
    애드온까지 ㅎㄷㄷ
  • 2015.10.15 23:58 #26257
    소스 수정은 아무래도 거부감이 있는 분들이 계실거 같아서요. @_@
  • 2015.10.15 17:48 #25966
    와.. 감사합니다!
  • 2015.10.15 17:49 #25970
    결자해지^^
  • 2015.10.15 23:58 #26254
    도움이 되셨길 ㅎㅎ
  • 2015.10.15 18:02 #26006

    고생하셨습니다. :p

     

    이제 좀 쉬세요~ ㅎㅎ

  • 2015.10.15 23:56 #26248
    ㅠㅠ
  • 2015.10.15 18:07 #26024

    style태그를 통한 background:url()의 경우는 어떨까요? (리무브핵으로 막히나..)

     

     

    아무튼 고생하셨습니다.

     

    절대 잘못하신 거 없으시니, 마음 무겁게 가지지 마세요..ㅎㅎ 미솔님꼐서 일으킨 문제라뇨..

     

    당치도 않습니다! XE 문제인거죠!!

  • 2015.10.15 23:56 #26245
    style 자체가 일반 회원 글에선 걸러지는 것 같습니다 ㅎㅎ
  • 2015.10.16 02:57 #26616
    전부다 막아지지는 않는 것 같더라구용..! 왜냐면 제가 몇번 수동으로 써봤기 때문에..(공홈이라던가..)
  • 2015.10.16 05:26 #27008
    예시 코드를 주시면 막아드립니다. ㅎㅎ
  • 2015.10.15 18:19 #26054
    오히려 문제를 제보해주셔서 막은건데요 ㅎㅎ
  • 2015.10.16 00:10 #26266
    호완성을 위해서 이 방법도 좋아요.
  • 2015.10.16 00:12 #26269
    https://xetown.com/xepoint/23414

    이 애드온을 적용한다면 이 모듈은 사용할 수 없겠네요...;;
  • 2015.10.16 00:16 #26272
    흐억... Referer 조건도 넣어줘야겠군요 @_@
    타사이트에서 실행은 XE 기본 CSRF 필터에 걸리겠죠?... 시간이 없어서 거기까진 ㅠㅠ
  • 2015.10.16 02:18 #26534
    혹시 펌추적모듈 사용하게 할 수 없을까요? 일단 보안때문에 애드온을 사용하게 되었는데요. 펌추적모듈이 마구잡이로 퍼가서 블로그 카페 여러곳에 자기글인냥 게시하는 사람들 잡아내는 유용한 모듈이라서요......
  • 2015.10.16 02:30 #26556
    일단, 임시방편으로 애드온 윗 부분에 코드를 넣어주면 됩니다.

    if($this->act == 'copytrack' ) return;
  • 2015.10.16 02:33 #26564
    감사합니다!
  • 2015.10.16 04:33 #26836
    감사합니다 냉큼 적용합니다
  • 2015.10.16 05:27 #27015
    넵 잘쓰세요!
  • 2015.10.16 04:41 #26869

    에드온 받아서 설치했습니다.

    다운 받아 압축풀고 업로드하고 설정하니

    5분 정도 소요되었네요

     

    근데 이 5분을 위해 대체 몇시간을 고생하셨을지를 생각하면...

    그저 감사하단 말로는 너무 부족한 듯 하지만.

     

    그래도

    감사합니다!

    감사합니다!!

    감사합니다!!!

    감사합니다!!!!

    감사합니다!!!!!

     

  • 2015.10.16 05:27 #27018
    오래 걸린건 아닌데 요새 컴퓨터 만질 시간이 잘 없어서요 ㅠㅎㅎ
  • 2015.10.18 09:51 #29815
    찾으시느라 고생했어요 ㅋㅋ