페이지 편집 화면과, comments 매크로 시리즈의 출력 양식에 텍스트 필드를 하나 추가한다. 이 필드는 div 태그로 둘러쌓여 있는데 이 태그의 스타일은 "display:none"이 적용되어 있어서 기본적으로 웹브라우저에서는 보이지 않는다.
즉 사람 눈에는 보이지 않는 필드인데, 스팸봇이 만일 웹 페이지 소스를 읽어서 분석을 한다면 봇에게는 보일 것이다. 만일 이 필드에 텍스트가 들어가서 submit되면, 스팸으로 간주하고 거부한다.
이 필드의 name은 "homepage"로 하였다. 봇이 과연 필드의 이름까지 보면서 값을 넣을지 말지 판단할지는 모르겠지만...
만일 봇이 페이지에 들어와서 submit을 발생시키는 게 아니라, 미리 만든 필드값들을 가지고 곧바로 저장 요청을 전송하는 형태라면 소용없겠다.
봇이 div태그의 스타일까지 읽어서 이게 함정이란 걸 파악할 수 있을까? 있다면 역시 소용없겠다.
봇이 아니라, 알바생이 스팸을 입력하는 거라면? -_-?? 역시 소용없겠다.
div에는 class만 명시해 놓고, display 스타일은 스타일쉬트에서 적용하는 것도 생각해봄직 한데, 스타일까지 읽는 봇이라면 css 파일도 분석하지 않을까 싶기도 함.
페이지 편집의 경우:
sub DoEdit { ... # ECode my $ecode = &simple_crypt(length($id).substr(&CalcDay($Now),5)); print &GetHiddenValue("ecode","$ecode")."\n"; # spambot trap - 여기서부터 추가 my $spambot_trap = "<DIV style='display:none;'>" . "Homepage: " . $q->textfield(-name=>"homepage", -class=>"comments", -size=>"10", -maxlength=>"80", -default=>"") . "</DIV>"; print $spambot_trap; ### 섹션 단위 편집 if ($section >= 1) { ... }
sub DoPost { ... if (($ecode ne $code_today) && ($ecode ne $code_yesterday)) { # spam &ReportError("SPAM editing"); return; } # 여기서부터 추가 my $trap = &GetParam("homepage", ""); if ($trap ne "") { &ReportError("SPAM editting caught in trap"); return; } ... }
코멘트 매크로의 경우:
sub MacroComments { ... # 이 단락 추가 my $spambot_trap = "<DIV style='display:none;'>" . "Homepage: " . $q->textfield(-name=>"homepage", -class=>"comments", -size=>"10", -maxlength=>"80", -default=>"") . "</DIV>"; $txt = $q->startform(-name=>"comments",-method=>"POST",-action=>"$ScriptName") . ... $name_field . " " . $spambot_trap . # 이 줄 추가 T('Comment') . ": " . ... }
코멘트 매크로로 들어온 내용을 저장하는 것은 comments.pl 쪽에서 수정
sub action_comments { ... if (($ccode ne $code_today) && ($ccode ne $code_yesterday)) { # spam &ReportError("SPAM comment"); return; } # spambot_trap - 이 단락 추가 my $trap = &GetParam("homepage", ""); if ($trap ne "") { &ReportError("SPAM comment caught in trap"); return; } ... }
3일 정도 지켜보니 이 상태에서도 꽤 효과가 있길래, 수정 없이 그냥 ext2.8에 올립니다.
아이디어 재미있네요. ^^
오늘 스팸이 있어서 "이럴수가 이것도 소용이 없는것인가!"했었는데, comments.pl 을 업뎃안했었군요.
처음 1주일은 완벽하게 막는 듯 보였으나, 2주째부터 이것을 뚫고 들어오는 스팸이 있음. 필드 수를 늘려볼까...