관리 메뉴

I LOVE EJ

게시판 금지단어 체크 본문

Web publishing/JavaScript

게시판 금지단어 체크

BeOne 2007. 8. 16. 14:54
****************************************************************************
************요기서 부터 여기 저기 게시판에서 모은 글들입니다.***********************
****************************************************************************
[powerbox 님글]

 도배기 문제 피하기

1. 폼에 히든값을 추가한다. 값은 페이지가 로딩된 시간.
그리고 처리하는 부분에서 폼의 시간과 현재 시간을 비교해서 5초 이내에 입력되는 놈들은 입력을 취소한다.

2. write form을 뿌려주는 페이지에서 세션값을 하나 셋팅한다. 그리고 처리할때는 해당 세션값이 존재하면 처리하고 세션값이 없으면 처리하지 않는다.
이 방법은 보통 도배기가 write form을 무시하고 전송하는 원리를 역이용한 방법으로 1번의 방법과 병행하면 효과만점...

3. 2번의 방법을 세션이 아닌 쿠키를 이용한 방법.

4. 폼필드명을 동적으로 생성해서 처리하는 방법.
쫌만 생각해보면 구현이 그렇게 난해하지 않으나 효과만점.

5. send 버튼을 눌러서 전송된 내용만 유효하도록...
단독으로 사용되기 어렵고 위의 방법들과 병행사용해야함...

(2003-08-27 18:27:40)

(4번은 소스를 너무 많이 건드릴것 같아 조금 그렇고 5 번은
----------------------------------------------------------------------


[kenu 님 글]
/* @author kenu@okjsp.pe.kr
*  @date 2003-04-14 3:12오전
*  @contact http://okjsp.pe.kr
*/
/*
  내용중에 금지단어 판별해서 경고하는 자바스크립트
*/
function check(n) {
 if (n.content.value.length==0 ) {
     alert("no content");
     return false;
 }
 // filtering
 banWord = filterWord(n.content.value);
 if (banWord.length > 0) {
     alert(banWord +' word can\'t be used.');
     return false;
 }
}
// 금지단어
var ban = new Array(
'goodgame',
'캠야 동'
);
// 금지단어 판단
function filterWord(content) {
 for (prop in ban) {
  if(content.toLowerCase().indexOf(ban[prop]) > -1) {
   return ban[prop];
  }
 }
 return '';
}



[여기서 부터는 ASP 쪽 내용입니다...^^ ]

--------------------------------------------------------------------------------------
[데브피아에서 검색한 김일님 글]

그동안 게시판에 무작위로 등록되는 글 때문에 고생이 많았습니다.

하루에 적어도 5건에서 10건씩 일반광고부터 xxx 광고까지 지우느라 매시간 한번씩 접속해서 지우는데 시간을 많이 허비했습니다.

이렇게까지 광고를 해야하는지?


어제 그 방법을 적용하다 하루동안 분석을 했습니다.

사람이 직접 입력하는 경우는 막을 수가 없습니다.

그러나 프로그램에 의해 자동으로 등록되는 게시물은 막을 수가 있습니다.

하지만 이것을 뚫고 글을 등록할 수 있지만, 현재 게시물 등록기에서는 등록할 수가 없습니다.

이것을 뚫는 방법은 간단하지만, 만약 뚫리면 자바스크립트로 암호화해서 다시 올리도록 하겠습니다.


이렇게 하면 등록 숫자가 엄청 줄어들 것입니다.....


제가 운영하는 사이트는 IIS 5.0으로 돌리고 ASP로 프로그래밍 되었습니다.

막는 방법은 간단히 세션정보를 이용하는 것입니다.


아래는 제 사이트에서 운영하는 게시판의 일부 소스입니다.

분석해 보시면 무척이나 간단할 것입니다.


게시글 입력창(board_form.asp)


function checkVal(form) {
    if (form.author.value=="") { alert("\n인증코드를 입력해 주세요.");form.author.focus();return;}
    if (form.author.value!=form.checker.value) { alert("\n인증코드가 틀립니다. 다시 입력해 주세요."); form.author.value=""; form.author.focus(); return;}
    form.submit();
}


<form name="fDoc" METHOD="post" ACTION="board_insert.asp?Mnumber=0&amp;cpage=<%=cPage%>&amp;refleshcheck=1">

    <!-- 무작위로 등록하는 프로그램에서 입력될 수 없는 인증코드를 부여하고 등록시 확인합니다. -->

    <input TYPE="hidden" NAME="checker" VALUE="<%=Right(Session.sessionid, 4)%>" SIZE="4">
    <font class=font10 COLOR="#000000"><b>등록시 사용할 인증 코드</b> : <%=Right(Session.sessionid, 4)%></font>
    <input TYPE="text" NAME="author" VALUE SIZE="8">
    <input TYPE="button" VALUE="글 올리기" onClick="checkVal(this.form)">
</form>


게시글 등록(board_insert.asp)

<%  Response.Buffer = true

    Response.Expires = 0


    ' 무작위 등록 게시물을 막는 곳입니다.

    If (Request("author") <> Right(Session.sessionid, 4)) Then
        Response.Write "<center><br><br><font size=2>불법적으로 글을 등록하려고 시도하였습니다</font><br><br>"
        Response.Write "<input type=""button"" value="" 뒤 로 "" onclick=""history.go(-1)"">"
        Response.End
    End If


..... 이하 생략


실제 화면 보기

---------------------------------------------------------------------------------------
[데브피아 시샵님(?) 글이었던듯 ]
우선 스팸성 게시물은 홈페이지의 글 작성을 통하는 것이 아니라... 데이터를 처리하는 페이지로 바로 날려서 하는 방식을 취합니다.
이런 글들은 쿠키를 지정하거나... 데이터를 날리는 페이지의 주소를 구해서 방지할 수 있을 듯 합니다.
예를 들어 쿠키 사용법으로는..
글 작성 페이지에 들어어면 쿠키를 설정하고... 글 작성 처리에서는 이 쿠키가 있는지 확인하는 방법입니다.
 
이렇게 구현하더라도 자동 스팸등록 부분은 어느정도 해결될 수 있지만... 손으로 직접 입력하는 스팸들은 딱히 방지할 방법은 없습니다.
참고하세요. ^^

---------------------------------------------------------------------------------------

[데브피아 어떤 사용자분 글]
스팸메일에 못지않게 스팸게시물 또한 게시물 관리자에게는 골치거리기도 합니다.
쓰는것과 차단하는 일은 창과 방패 관계이겠지만 아무래도 방패쪽이 열세인듯 싶습니다.
스팸게시물 차단하는 방법에 딱히 묘안은 없는걸로 알고 있지만 몇가지 아이디어 차원에서
정리해 본다면...

하나는 Request 객체로 값이 넙어올때 Request.Form 문으로 사용을 권장합니다.
쿼리 순서상으로도 우선순위일 뿐만아니라 GET방식 쿼리를 차단할수 있습니다.


또한가지는 Request.ServerVariables("HTTP_REFERER") 문장을 사용해서
이전 페이지의 URL을 비교해서 값이 없는 요청을 차단하는것도 게시물 자동 생성기의
접근을 차단하는 방법이라 생각합니다.

그밖에 IP필터링이나 등록내용 필터링 등으로 최대한 그물망을 펼쳐놓는 방법이
비회원제로 운영하는 게시물로써의 방법이 아닐까 싶네요...

두서없이 떠오르는 생각을 정리했기 때문에 중요한 정보는 아닌듯하군요... --a

좋은 하루 되세요...


------------------------------------------------------------------------------------
[http://taeyo.pe.kr 에서 paesangk 님글]
wrenth님께서 제시한 "레퍼러를 이용하면 직접입력하지 않는 한 어떤 등록기로도 등록이 안됩니다. ⌒.⌒ "
입니다. 한번 만들어 봤어요.. 맞는가^^;
한번 테스트해보시구요.. 제가 현재사용하고 있는데.. 많이 줄어들었네요..^^


SUB PathCHK
 Dim PathValue
 PathValue = MID(Request.ServerVariables("HTTP_REFERER"),8)
 IF PathValue = "" THEN PathValue = "http://"
 IF Request.ServerVariables("HTTP_HOST") <> LEFT(PathValue,instr(PathValue,"/")-1) THEN
  Response.write ("<SCRIPT LANGUAGE=""JavaScript"">"&chr(13))
  Response.write ("<!--"&chr(13))
  Response.write ("alert('접속경로가 정확하지 않습니다. 불법적으로 링크를 걸수 없습니다.');"&chr(13))
  Response.write ("location.href='http://www.handoli.com/';"&chr(13))
  Response.write ("//-->"&chr(13))
  Response.write ("</SCRIPT>"&chr(13))
  Response.END
 END IF
END SUB

==================================================================================================
http://patent.naver.com/patent/specification.php?ApplicationNumber=1020010071322
http://www.hantime.com/