Javascript로 티스토리 스팸 트랙백 차단하기

2014. 10. 7. 13:01IT/Tistory Tips

요즘 티스토리에 스팸 트랙백이 기승을 부린다. 하루에도 몇십 개씩 등록되는 트랙백을 지우느라 정신이 없다. 결국, 임시방편으로 스킨을 수정해서 트랙백이 표시되는 부분을 숨겨둔 다음 방법을 찾기 시작했다. 그러다 블로그 트랙백 전체 차단 기능 추가 공지가 눈에 띄었다. 트랙백이 문제가 되니 일단 트랙백 기능 자체를 차단해서 스팸 유입을 막고 그 뒤에 해결책을 찾겠다는 것.

이게 무슨 해결책인가 싶어서 유심히 보고 있는 중 '해커 C' 님의 댓글을 보게 된다. 트랙백 주소형식을 찾아서 스팸을 남기는 봇에 대비해서 스킨을 수정해서 게시물에 트랙백 주소를 표시하지 않고 이용자가 버튼을 클릭했을 때만 트랙백 주소가 표시되는 스크립트를 사용하는 방법이다. 일단 티스토리 트랙백 스팸 차단방법, 좀 더 깔끔하게 차단하기. 게시글을 확인하고 스크립트를 적용하려고 하는 데 웬일인지 게시글 주소가 표시가 안 된다. 이상하다 싶어서 다시 해결책을 찾던 중 '해커 C' 님의 스크립트를 조금 다듬어서 사용하는 방법을 남겨주신 '뭐하라' 님의 글을 보게 된다. 티스토리 트랙백 스팸 효과적으로 차단하는 스크립트, 적용 방법 게시글의 방법을 따라 적용해보니 잘 된다. 그러다가 '해커 C' 님의 티스토리 스팸 트랙백 차단 방법, 업그레이드 버전을 발견하고 최종적으로 적용했다. 기능적인 부분은 큰 차이가 없지만, 구성이 더 마음에든달까? 일단 2일째 사용한 결과 스팸 트랙백은 하나밖에 없었다. 굳!

기본적인 코드는 아래와 같다.

코드 1 - 트랙백 주소 생성 코드 (<s_tb> 바로 위에 적용)

<script>
//<![CDATA[
function hackerc_com(){
    var str="";
    str+="http://"+location.href.split('/')[2];
    str+="/trackback/";
    str+="[##_article_rep_id_##]";
    document.getElementById("hackerc_trackback").value=str;
    document.getElementById("hackerc_trackback").select();
}
//]]>
</script>

<s_tb>

코드 2 - 트랙백 표시 코드 ([##_tb_address_##] 삭제 후 적용)

<div style="position:relative !important;padding:10px !important;margin:3px !important;border:1px solid #BBB !important;background-color:#F7F7F7 !important;font-size:14px !important;line-height:1 !important;color:#333 !important;border-radius:2px !important">
<input type="text" id="hackerc_trackback" name="anti-spam" onclick="javascript:hackerc_com()" value="트랙백 주소 보기" style="display:block !important;overflow:hidden !important;width:100% !important;height:30px !important;padding-top:2px !important;margin-bottom:7px !important;border:1px solid #E0E0E0 !important;background-color:#FFF !important;text-indent:8px !important;border-radius:2px !important">
<span style="position:absolute !important;padding:10px 7px 10px !important;right:0 !important;bottom:0 !important;font-size:12px !important;color:#AAA !important;cursor:pointer !important" title="적용방법" onclick="window.open('http://hackerc.tistory.com/700')">{ ? }</span>
<span style="font-size:12px !important;color:#999 !important">※ 스팸 트랙백 차단 중 ...</span></div>

코드와 원리를 간단히 살펴보면 먼저 티스토리 스킨에 포함되어 있던 트랙백 주소 표시 치환자([##_tb_address_##])를 지워서 트랙백을 없앤다. 그다음 원래 트랙백 주소가 표시될 자리에 "트랙백 주소 보기" 글자(input 요소)를 표시하고 이 부분을 클릭하면 hackerc_com이라는 함수를 실행시킨다. 이 함수(function)는 str이라는 변수에 현재 게시물의 트랙백 주소를 넣고 "트랙백 주소 보기"를 클릭했을 때 트랙백 주소가 담긴 str 변수를 화면에 표시하는 방식이다. 기존에는 페이지 로딩 시 화면에 표시되는 트랙백 주소가 hackerc_com 함수를 실행할 때만 화면에 표시되어서 트랙백 주소 형식을 파악해서 스팸을 남기는 봇에 의한 피해를 막는다.

적용은 위 그림을 참고 해서 적용한다. 먼저 [티스토리 관리] - [HTML/CSS 편집] - [skin.html]로 이동한 다음 코드1 부분은 <s_tb> 바로 윗부분에 붙여 넣고 코드2 부분은 [##_tb_address_##] 치환자를 지우거나 주석 처리한 다음 그 자리에 붙여 넣는다.

코드 2는 div 요소 내부에 input 요소가 들어간 형태로 코드는 간단하지만, 스타일 지정 부분이 꽤 길다. 취향에 따라서 스타일을 바꾸거나 CSS에 따로 스타일을 지정해도 괜찮을 것 같다.

100% 모든 스팸 트랙백을 차단한다고 얘기할 순 없지만, 확실히 이전보다 많이 줄어든 효과를 확인할 수 있었다. 트랙백을 사용하자니 스팸이 너무 많고 그렇다고 트랙백 기능을 없애자니 아쉬운 분들께 필요한 팁이 아닐까 싶다. 일단 티스토리에서 자체적으로 강화된 스팸 필터를 제공하기 전까진 '해커 C'님의 스크립트를 사용해야겠다.

한 가지 걱정되는 것은 게시물 주소에서 트랙백 주소를 알아낼 수 있는 티스토리의 특성상 트랙백 주소를 표시하지 않는다고 모든 트랙백 스팸을 막을 수 없다는 점이다. 아직은 조금 더 지켜봐야 할 것 같다.