Q&A

댓글 21

  • 태그입력자체를 막고있지는 않습니다.
    단지 해당 스크립트에 대해서 HTML으로 실행하지 못하도록만 보안이슈 적용되어잇는 상태입니다.
  • @람보
    코어 개조를 했기때문에 코어 업그레이드는 못해주고 있는 상황이며 1.7.3.7 버전이며,
    태그란에 스크립트를 입력시 html으로 실행이 되는 상황입니다.
  • @xelover
    태그가 나타나는 부분에 htmlspecialchars 라는 함수를 적용시켜주세요.

    만약 태그를 나타내는 변수가 $tags라면 템플릿 문법으로는 {htmlspecialchars($tags)} 로 입력하실 수 있습니다.
  • 이미 최신 버전의 스케치북에서는 전부 미솔님이 적어주신대로 처리되어 있는 상태인것 같은데요?

     

    <!--// Tag -->
    {@ $tag_list=$oDocument->get('tag_list') }
    <div cond="count($tag_list)" class="rd_t_f rd_tag css3pie clear">
    <div class="bg_f_color border_color">TAG •</div>
    <ul>
    <!--@for($i=0;$i<count($tag_list);$i++)-->
    {@ $tag=$tag_list[$i]; }
    <li><a href="{getUrl('search_target','tag','search_keyword',$tag,'document_srl','')}">{htmlspecialchars($tag)}</a><span class="comma">,</span></li>
    <!--@end-->
    </ul>
    </div>

     

  • @alicetaylor
    스케치북 1.6.3.6 버전입니다
  • 1.6.3.0 버전 기준으로 write_form.html 파일이 아래처럼 되어 있던데, 혹시 이 부분도 체크해보셨나요?

     

    <!--// 태그 -->
    <div class="tag itx_wrp">
    <span class="itx_wrp">
    <label for="tags">{$lang->tag} : {$lang->about_tag}</label>
                <input type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="itx" />
    </span>
    </div>
  • @윤삼

    modules/board/skins/sketchbook5/write_form.html 파일입니다.write_form.html

    말씀하신것처럼 내용이 같은데.. 어떻게 고쳐줘야 할지 모르겠습니다..

  • @윤삼
    53
    54
    55
    56
    57
    58
    59
    <!--// 태그 -->
    <div class="tag itx_wrp">
    <span class="itx_wrp">
    <label for="tags">{$lang->tag} : {$lang->about_tag}</label>
                <input type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="itx" />
    </span>
    </div>

     

     

    이것을 

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!--// Tag -->
    {@ $tag_list=$oDocument->get('tag_list') }
    <div cond="count($tag_list)" class="rd_t_f rd_tag css3pie clear">
    <div class="bg_f_color border_color">TAG •</div>
    <ul>
    <!--@for($i=0;$i<count($tag_list);$i++)-->
    {@ $tag=$tag_list[$i]; }
    <li><a href="{getUrl('search_target','tag','search_keyword',$tag,'document_srl','')}">{htmlspecialchars($tag)}</a><span class="comma">,</span></li>
    <!--@end-->
    </ul>
    </div>

     

     

    이것으로 통채로 바꿔주면 되나요..?

  • @xelover
    오오, 그러면 안 돼요. 대체하시려는 소스는 write_form이 아니라 _real.html에서 쓰이는 걸 거예요.
    htmlspecialchars가 안 먹는다면, 아예 태그 입력 창에 특수기호 입력을 막을 수 있도록 별도의 스크립트를 적용해보시는 게 어떨까요.
    관련 소스는 검색해보시면 많이 나올 겁니다.
  • @윤삼
    태그입력자체를 막지않고,
    아예 스크립트를 HTML으로 실행하지 못하도록 할 수는 없나요?
  • @xelover
    글쎄요, 코어 업데이트 말고는 잘 모르겠어요;;; @@
  • @윤삼
    코어 문제는 아닌거같습니다..

    xe 최신버전에 있는 tag.controller.php 가 들어있는 /modules/tag 를 통째로 FTP 에서

    현재 사용하고 있는 xe 1.7.3.7 /modules/tag 에 붙여넣기 해도 태그에 스크립트 삽입시.. 여전히 스크립트가 보입니다..
  • @xelover
    htmlpurifier 이야기였는데요. 이게 게시판 에디터에서는 스크립트 실행을 막아주는 걸로 알고 있어요. 근데 생각해보니 에디터에서만 적용되고 태그 입력창에선 적용이 안 되는 건가 싶기도 하네요;;;
  • @xelover
    스크립트는 클라이언트 사이드 언어라서 실행을 하고 안하고는 사용자가 결정합니다.
  • @alicetaylor
    혹시 해결방법 아시나요..?
    아직까지도 해결이 안되고 있어서요.. ㅠㅠ
  • @xelover
    아니면 contents를 RemoveHackTag로 감싸보세요.
  • @윤삼
    <script>
    function inputCheckSpecial(){
    var strobj = document.all.special; //입력값을 담을변수.
    re = /[~!@\#$%^&*\()\-=+_']/gi;
    if(re.test(strobj.value)){
    alert("특수문자는 입력하실수 없습니다.");
    strobj.value=strobj.value.replace(re,"");
    }
    }
    </script>

    이걸 어디에 넣어주면 될까요?
  • @xelover
    아무데나 넣으셔도 될 거예요. 가급적이면 나중에 수정하거나 할 때 찾기 쉬운 곳이면 좋겠죠.
    document.all.special에서 special 대신에 tags를 넣어야겠구요.
  • @윤삼
    <!--// 태그 -->
    <div class="tag itx_wrp">

    <script>
    function inputCheckSpecial(){
    var strobj = document.all.tags; //입력값을 담을변수.
    re = /[~!@\#$%^&*\()\-=+_']/gi;
    if(re.test(strobj.value)){
    alert("특수문자는 입력하실수 없습니다.");
    strobj.value=strobj.value.replace(re,"");
    }
    }
    </script>

    <span class="itx_wrp">
    <label for="tags">{$lang->tag} : {$lang->about_tag}</label>
                <input type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="itx" />
    </span>
    </div>

     

    첫번째입니다.

     

     

     

     

    <!--// 태그 -->
    <div class="tag itx_wrp">
    <span class="itx_wrp">
    <label for="tags">{$lang->tag} : {$lang->about_tag}</label>
                <input type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="itx" />
    </span>
    </div>

    <script>
    function inputCheckSpecial(){
    var strobj = document.all.tags; //입력값을 담을변수.
    re = /[~!@\#$%^&*\()\-=+_']/gi;
    if(re.test(strobj.value)){
    alert("특수문자는 입력하실수 없습니다.");
    strobj.value=strobj.value.replace(re,"");
    }
    }
    </script>

     

    두번째입니다.

     

     

     

    첫번째(div 안에 스크립트를 넣었습니다)와.. 두번째..(div 태그가 끝나는 바로 뒤에 넣었습니다) 

    어느것이 맞는건가요..?

     

  • 둘 다 잘 작동하지 않나요? 개인적으론 깔끔하게 뒷쪽이 나아보이긴 합니다만ㅎㅎ
  • @윤삼
    안되네요 둘다 ㅎㅎ..