웹마스터 팁
무분별한 스팸글 등록으로부터 임시해결 팁
2010.08.12 21:59
제가 적용해보고 일주일 본 상태인데 1건도 스팸 등록되지 않았습니다.
당연히 스팸 공격이 자주당했던 곳을 비회원 작성으로 풀었는데도 입니다.
준비물
xe/modules/board/board.controller.php
xe/modules/editor/skins/스킨명/editor.html
사용하시는, 스팸 등록이 이루워지는 모듈의 에디터 스킨을 무엇으로 설정하셨는지 확인하신후 해당 폴더로 이동해서 editor.html 파일을 편집기로 엽니다.
제일 최상줄에 아래를 추가합니다.
<input type="hidden" name="{base64_encode($request_uri.date('Ymd'))}" value="Y" />
board.controller.php 파일을 편집기로 엽니다.
procBoardInsertDocument(), procBoardInsertComment() 함수를 검색합니다.
/** * @brief 문서 입력 **/ function procBoardInsertDocument() { // 권한 체크 if($this->module_info->module != "board") return new Object(-1, "msg_invalid_request"); if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted'); $logged_info = Context::get('logged_info'); // 글작성시 필요한 변수를 세팅 $obj = Context::getRequestVars(); /* 스팸 대응 2010.08.05 */ if($obj->{strtolower(base64_encode(Context::getRequestUri().date('Ymd')))} != 'Y') return new Object(-1, 'msg_not_permitted'); $obj->module_srl = $this->module_srl; if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N';
/** * @brief 코멘트 추가 **/ function procBoardInsertComment() { // 권한 체크 if(!$this->grant->write_comment) return new Object(-1, 'msg_not_permitted'); $logged_info = Context::get('logged_info'); // 댓글 입력에 필요한 데이터 추출 /* 스팸 대응 2010.08.05 */ $obj = Context::gets('document_srl','comment_srl','parent_srl','content'+ ','password','nick_name','member_srl','email_address','homepage','is_secret','notify_message',strtolower(base64_encode(Context::getRequestUri().date('Ymd')))); $obj->module_srl = $this->module_srl; /* 스팸 대응 2010.08.05 */ if($obj->{strtolower(base64_encode(Context::getRequestUri().date('Ymd')))} != 'Y') return new Object(-1, 'msg_not_permitted'); // 원글이 존재하는지 체크 $oDocumentModel = &getModel('document'); $oDocument = $oDocumentModel->getDocument($obj->document_srl); if(!$oDocument->isExists()) return new Object(-1,'msg_not_permitted');
스팸 대응이라는 주석문 바로 밑에 것들을 추가 또는 수정하세요.
테스트는 위 내용을 모두 적용 후 캐쉬 재생성 하시고 테스트하려는 모듈로 가셔서 에디터 스킨을 위 내용 추가하지 않은 에디터로 임시로 바꾸세요. 그리고 로그인 상태로 글 등록을 하세요.
권한에 의한 오류 팝업이 나오면 성공입니다.
XML, BlogApi도 권한 오류를 내뿜습니다.
XML, BlogApi에서 본인의 홈페이지로 글을 써야겠다고 하시는 분들은 어쩔 수 없어요.
board.controller.php 수정 어려우신 분들은 첨부파일로 올려두겠습니다.
꼭 미리 기존에 있던 파일을 백업 받으신 후 덮어씌워주세요.
-- 2010.08 16 추가 --
-- 2011.05 09 수정 --
회원 가입 부분에도 추가합니다.
./modules/member/skins/스킨명/signup_form.html
id가 fo_insert_member로 되어있는 <form> 태그 바로 밑에 아래를 추가하세요.
<input type="hidden" name="{base64_encode($request_uri.date('Ymd'))}" value="Y" />
./modules/member/member.controller.php
procMemberInsert() 함수안에 스팸 대응이라는 주석문이 있는곳을 추가, 수정하세요.
/** * @brief 회원 가입 **/ function procMemberInsert() { if(Context::getRequestMethod() == "GET") return new Object(-1, "msg_invalid_request"); $oMemberModel = &getModel('member'); $config = $oMemberModel->getMemberConfig(); // before 트리거 호출 $trigger_output = ModuleHandler::triggerCall('member.procMemberInsert', 'before', $config); if(!$trigger_output->toBool()) return $trigger_output; // 관리자가 회원가입을 허락하였는지 검사 if($config->enable_join != 'Y') return $this->stop('msg_signup_disabled'); // 약관에 동의하였는지 검사 (약관이 있을 경우만) if($config->agreement && Context::get('accept_agreement')!='Y') return $this->stop('msg_accept_agreement'); // 필수 정보들을 미리 추출 /* 스펨 대응 2010.08.13 */ $args = Context::gets('user_id','user_name','nick_name','homepage','blog','birthday','email_address','password','allow_mailing','find_account_question','find_account_answer',strtolower(base64_encode(Context::getRequestUri().date('Ymd')))); /* 스펨 대응 2010.08.13 */ if($args->{strtolower(base64_encode(Context::getRequestUri().date('Ymd')))} != 'Y') return new Object(-1, 'msg_invalid_request'); $args->member_srl = getNextSequence(); // 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
댓글 15
-
혹시 bodex에서는 어떻게 수정해야 하는지 알려주실 수 있으신지요?board랑 bodex가 좀 다른지, 수정해보아도 글 등록이 잘 안되네요.
-
살펴봤는데 다를건 없는데요.에디터에 잘 하신건지요? 소스보기하셔서 위에 hidden용 input 코드가 들어가있는지 확인해보시고요.캐쉬 재생성도 해보세요.특별히 기본 core랑 bodex랑 추가부분은 다를게 없었습니다.
-
Kit Kat
2011.03.17 17:08
1.4.4 버젼에서 회원가입폼에서 에러 생깁니다.... "잘못된 요청입니다" -
지금도 잘 될까요?
한번 해봐야 겠네요..
-
SMaker
2011.10.29 19:24
실제로 적용해보진 않았지만 예외 상황에서 예기치 못한 문제가 발생할 것 같습니다.
오후 11시 59분에 회원 가입 페이지를 연 다음 0시에 회원 가입을 시도하게된다면 에러가 나타나겠지요.
-
11시 59분과 00시 00분 사이의 1분간의 사용자와 대량 스팸 발생을 따져보면 적용해도 피해보다는 이득이 있을거라는 마음입니다.
-
똑디
2011.11.03 13:31
라르게덴님..정말 멋진 팁 감사합니다. 스팸때문에 골머리 앓고 있으신분들은 정말 많은 도움이 되겠네요.
아직 적용은 안해봤지만 당장 테스트해봐야겠네요. 선리플 후적용이네요.^^
-
snows96
2011.11.07 00:47
테스트는 위 내용을 모두 적용 후 캐쉬 재생성 하시고 테스트하려는 모듈로 가셔서 "에디터 스킨을 위 내용 추가하지 않은 에디터로 임시로 바꾸세요. 그리고 로그인 상태로 글 등록을 하세요. 권한에 의한 오류 팝업이 나오면 성공입니다."
음......... 제가 코드를 볼 줄 몰라서 어떤 방식으로 돌아가는진 모르겠지만, 위의 테스트 방법을 보아서는 정상적으로 에디터와 스킨을 불러왔다면 기본적으로 있어야 할 부분이 없을 경우에 차단시키는 것 같군요..... 프로그램에서는 에디터를 불러오지 않고 무조건 단방향으로 전송만 할 것이니.......
E-mail인증보다 확실한 것 같습니다. 근데 무엇보다.... 제 홈피는 방문자자체가 적어서 이멜인증만 적용해도 스팸이 개설한 이래로 한번도 올라온적이 없어서 적용하지 않아도 될 것 같다는....... 흑 ㅠㅠ (의심가는 닉넴과 아이디로 가입한 사람은 있었지만 이멜주소 아무렇게나 처서 인증못받아 글을 못올리더군요 ㅎㅎ)
-
똑디
2011.11.11 16:12
게시판모듈과 에디터모듈에 정식으로 적용되어 배포되면 좋겠네요.
-
해피지영
2011.11.22 16:40
와!! 라르게덴님 정말 감사해요! 항상 정말 좋은 프로그램 공유해주셔서!! 최고에요~^^ 저도 아직 적용안했지만 후 실행 선 추천! ^^
-
해피지영
2011.11.28 20:08
라르게덴님 이렇게 수정하고 테스트 완료하고 테스트 게시판에 글작성 했더니 권한 오류가 나왔습니다;;; 성공~
그런데 제가 관리자인데...일반 게시판에서 저도 글을 못쓰게 권한이 없다고 나오면 이건 이상한 거 아닌가요? 제가 뭘 잘못하는 걸까요??
-
이 팁은 1.4.5 때 사용된지라 1.5.0은 적용이 안될 수 있고요. 템플릿 계열의 파일(html)을 수정하시거든 항상 캐시를 재생성을 해보셔야 내용을 적용 받으실 수 있습니다. 그러니까 에디터 스킨에 상기의 필요 내용을 넣으셨으면 반드시 캐시를 재생성하신 후 테스트 해보셔야 합니다.
만약 안되시면 여기다가 댓글이 아닌 제게 쪽지주십시오.
-
이태워니안지영
2011.12.01 08:28
라르게덴님~위에 있는 1.4.4.4 분도 저와 같은 증상이네요. 저도 1.4.4.4 사용하거든요. 버전이 달라서 1.4.5 이전꺼는 안되나 봐요~
1.4.4.4를 쓰는 이유는 라르게덴님이 만들어주신 entry 애드온을 쓰려고 그러는 거였거든요. 윈도우 웹서버 web.config 파일을 새로운 버전에 덮어씌우고 entry 애드온을 쓰면 잘 안되어서 잘되는 1.4.4.4로 아직도;;; ^^
암튼~~감사합니다~~~
-
똑디
2011.12.23 10:12
아...다시금 스팸이 올라오네요. 팁을 적용해도 뚫렸나봐요. 스패머들이 라르게덴님 소스도 분석을 해서 뚫었낭?^^
제목 | 글쓴이 | 날짜 |
---|---|---|
한꼬마의 제로보드 이용법 (sql로 테이블 호출) [2] | 한꼬마 | 2003.11.26 |
나만의 미니홈 만들기 ㅡ 글쓰기에 앞서... [1] | 예뜨락 | 2004.11.17 |
나만의 미니홈 만들기 ㅡ 메인 기초 설계 .home.php
[12]
![]() | 예뜨락 | 2004.11.17 |
나만의 미니홈 만들기 ㅡ 메인 기초 설계2 .레이아웃 | 예뜨락 | 2004.11.18 |
나만의 미니홈 만들기 ㅡ 메인 기초 설계3 .레이아웃
[2]
![]() | 예뜨락 | 2004.11.19 |
나만의 미니홈 만들기 ㅡ 기초적인 관리 페이지
[3]
![]() | 예뜨락 | 2004.11.20 |
나만의 미니홈 만들기 ㅡ 미니홈 생성 페이지
[3]
![]() | 예뜨락 | 2004.11.20 |
나만의 미니홈 만들기 ㅡ list.php , 디비 테이블 생성
[6]
![]() | 예뜨락 | 2004.11.26 |
나만의 미니홈 만들기 ㅡ view.php 파일과 제목링크
[9]
![]() | 예뜨락 | 2004.11.27 |
나만의 미니홈 만들기 ㅡ write.php 파일과 write_ok [5] | 예뜨락 | 2004.11.30 |
나만의 미니홈 만들기 ㅡ delete.php 파일 [2] | 예뜨락 | 2005.01.03 |
나만의 미니홈 만들기 ㅡ password.php
[8]
![]() | 예뜨락 | 2005.05.07 |
나만의 미니홈 만들기 ㅡ 간단한 최근글 불러오기 [6] | 예뜨락 | 2005.05.09 |
포인트부여시 ...회원로그인 [2] | 구본순 | 2007.08.28 |
관리자모드 - 관리자그룹만 모든 회원리스트보기 [2] | 이지혜609 | 2007.10.23 |
PHP에 입문하시는 분들을 위해 적어봅니다. [5] | 특급잠수부 | 2008.04.26 |
PHP_9_My-sql함수를 이용한 프로그램_1 | 아무흐 | 2008.07.15 |
트래픽관리 Throttle-status 사용자 인증시키기 [1] | Cksoft | 2003.03.18 |
한컴 리눅스 2.2 apach php mysql phpmyadmin zeroboard 서버구축기 예전에 쓴글 약간 수정판 입니다. [6] | 한돌 | 2003.05.19 |
sh명령어를 이용한 웹사이트 관리 | 김동욱 | 2004.08.09 |