xe 태그 입력란에 스크립트 입력 못하게 막으려면 어떻게 해야하나요? xelover 2016.05.22 20:37 314 0 21 xe 태그(tag) 입력란에 스크립트 입력 못하게 막으려면 어떻게 해야하나요? 스케치북입니다.
댓글 21
단지 해당 스크립트에 대해서 HTML으로 실행하지 못하도록만 보안이슈 적용되어잇는 상태입니다.
태그란에 스크립트를 입력시 html으로 실행이 되는 상황입니다.
만약 태그를 나타내는 변수가 $tags라면 템플릿 문법으로는 {htmlspecialchars($tags)} 로 입력하실 수 있습니다.
이미 최신 버전의 스케치북에서는 전부 미솔님이 적어주신대로 처리되어 있는 상태인것 같은데요?
{@ $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>
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
말씀하신것처럼 내용이 같은데.. 어떻게 고쳐줘야 할지 모르겠습니다..
<!--// 태그 --><divclass="tag itx_wrp"><spanclass="itx_wrp"><labelfor="tags">{$lang->tag} : {$lang->about_tag}</label><inputtype="text"name="tags"id="tags"value="{htmlspecialchars($oDocument->get('tags'))}" class="itx" /></span></div>이것을
<!--// Tag -->{@$tag_list=$oDocument->get('tag_list') }<div cond="count($tag_list)"class="rd_t_f rd_tag css3pie clear"><divclass="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><spanclass="comma">,</span></li><!--@end--></ul></div>이것으로 통채로 바꿔주면 되나요..?
htmlspecialchars가 안 먹는다면, 아예 태그 입력 창에 특수기호 입력을 막을 수 있도록 별도의 스크립트를 적용해보시는 게 어떨까요.
관련 소스는 검색해보시면 많이 나올 겁니다.
아예 스크립트를 HTML으로 실행하지 못하도록 할 수는 없나요?
xe 최신버전에 있는 tag.controller.php 가 들어있는 /modules/tag 를 통째로 FTP 에서
현재 사용하고 있는 xe 1.7.3.7 /modules/tag 에 붙여넣기 해도 태그에 스크립트 삽입시.. 여전히 스크립트가 보입니다..
아직까지도 해결이 안되고 있어서요.. ㅠㅠ
function inputCheckSpecial(){
var strobj = document.all.special; //입력값을 담을변수.
re = /[~!@\#$%^&*\()\-=+_']/gi;
if(re.test(strobj.value)){
alert("특수문자는 입력하실수 없습니다.");
strobj.value=strobj.value.replace(re,"");
}
}
</script>
이걸 어디에 넣어주면 될까요?
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 태그가 끝나는 바로 뒤에 넣었습니다)
어느것이 맞는건가요..?