웹마스터 팁
무분별한 스팸글 등록으로부터 임시해결 팁
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
-
하늘종
2010.09.23 20:51
혹시 bodex에서는 어떻게 수정해야 하는지 알려주실 수 있으신지요?board랑 bodex가 좀 다른지, 수정해보아도 글 등록이 잘 안되네요. -
라르게덴
2010.09.23 21:08
살펴봤는데 다를건 없는데요.에디터에 잘 하신건지요? 소스보기하셔서 위에 hidden용 input 코드가 들어가있는지 확인해보시고요.캐쉬 재생성도 해보세요.특별히 기본 core랑 bodex랑 추가부분은 다를게 없었습니다. -
Kit Kat
2011.03.17 17:08
1.4.4 버젼에서 회원가입폼에서 에러 생깁니다.... "잘못된 요청입니다" -
도라란
2011.10.29 15:16
지금도 잘 될까요?
한번 해봐야 겠네요..
-
SMaker
2011.10.29 19:24
실제로 적용해보진 않았지만 예외 상황에서 예기치 못한 문제가 발생할 것 같습니다.
오후 11시 59분에 회원 가입 페이지를 연 다음 0시에 회원 가입을 시도하게된다면 에러가 나타나겠지요.
-
라르게덴
2011.11.03 01:37
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
라르게덴님 이렇게 수정하고 테스트 완료하고 테스트 게시판에 글작성 했더니 권한 오류가 나왔습니다;;; 성공~
그런데 제가 관리자인데...일반 게시판에서 저도 글을 못쓰게 권한이 없다고 나오면 이건 이상한 거 아닌가요? 제가 뭘 잘못하는 걸까요??
-
라르게덴
2011.11.29 21:25
이 팁은 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
아...다시금 스팸이 올라오네요. 팁을 적용해도 뚫렸나봐요. 스패머들이 라르게덴님 소스도 분석을 해서 뚫었낭?^^
-
EcusE
2011.12.23 14:35
제목 | 글쓴이 | 날짜 |
---|---|---|
사이트 모니터링 알리미에요...^^ [3] | web | 2010.12.10 |
비밀번호 찾기 기능 조심하세요 [4] | 老姜君 | 2010.10.28 |
Mysql에서 큐브리드로 데이터이전 [3] | 카르마 | 2010.10.23 |
탈퇴한 회원이 재가입 못하게 막는 방법 & 탈퇴한 회원 정보 보전 방법 [9] | sejin7940 | 2010.09.17 |
무분별한 스팸글 등록으로부터 임시해결 팁 [15] | 라르게덴 | 2010.08.12 |
관리자페이지 회원목록을 일반페이지에서 사용하기 [5] | 늘푸른이 | 2010.08.07 |
회원 정보 및 회원 리스트에 회원 성별 앞에 아이콘 넣기 [5] | 늘푸른이 | 2010.08.06 |
회원가입폼 내멋대로 내맘대로 하기. [9] | 지인짜 | 2010.08.04 |
검정 배경 홈페이지용 회원 정보 스킨 | LutZ | 2010.08.03 |
회원확장정보 변수 (출처:sMaker) [5] | 시니시즘 | 2010.07.19 |
관리자에게 무제한 추천기능 부여 (XE Core 수정) [8] | sejin7940 | 2010.06.30 |
웹호스팅 이전에따른 zb4에서 xe로 디비 이전하기 | 김선호489 | 2010.06.29 |
제어판의 관리자 메뉴 확장해서 보기 [1] | amd짱좋아 | 2010.06.27 |
관리자id , 닉네임, e-mail주소, 바꾸기, 최고관리자권한 없애기 [3] | 유병철 | 2010.06.18 |
Textyle 블로그 메인 주소를 blog.domain.com 로 설정하기 [1] | 네오랑 | 2010.05.18 |
XE 속도를 개선하기 위한 4가지 방법 (수정 #3) [9] | SMaker | 2010.04.14 |
확장변수 사용 (전화번호) 사용 예제 - 참고용 [2] | 무대포2 | 2010.03.17 |
E-Mail을 ID로 사용하기 [3] | June Oh | 2010.02.25 |
외부프로그램에서 제로보드 xe 및 그누보드 회원 연동(로그인) 하기 - 초간단 [1] | 한이73 | 2010.02.03 |
■ 초보님을 위한 XE 동영상 강좌 [초보님들 필독 권합니다. ^^] [8] | 파파민 | 2010.01.30 |