웹마스터 팁
무분별한 스팸글 등록으로부터 임시해결 팁
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
제목 | 글쓴이 | 날짜 |
---|---|---|
XE 1.5.1 업그레이드시 조심해야 [1] | 소걸음 | 2011.12.23 |
제로보드4에서 XE로 넘어와 헤메는 분들을 위해서(1편)-Xe개념이해와 설치 [16] | 황비 | 2010.03.18 |
제로보드4에서 XE로 넘어와 헤메는 분들을 위해서(3편:최종)-Widgets이해와 활용 [24] | 황비 | 2010.03.26 |
XE를 다른 호스팅업체로 이전하기 (서버이전) [8] | Gekkou | 2010.02.03 |
우분투 10.04 LTS, apache+php+mysql 설치하기(컴파일 안하고!) [1] | fsfsdas | 2011.02.20 |
외부페이지에서 롤오버오류 !! | oem팩토리 | 2012.01.03 |
XE 1.5.1.1 업데이트후 갑자기 댓글 에디터가 나오지않는 문제 해결팁 [3] | 재주꾼 | 2012.01.02 |
페이지 설정, 꼭 이렇게 해두세요 [10] | 老姜君 | 2010.10.14 |
XE에서 Context의 이해 [3] | 우진홈 | 2011.12.28 |
확정변수 로 프린트 페이지 꾸미기(/print_page.html) | 세상의지배자 | 2011.12.26 |
XE 애드온 개발하기 | 우진홈 | 2011.12.24 |
무분별한 스팸글 등록으로부터 임시해결 팁 [15] | 라르게덴 | 2010.08.12 |
오른쪽 마우스 사용 금지하기 [15] | Fursys | 2008.05.28 |
[마지막팁] 제로보드4 처럼 레이아웃 없이 XE로 나만의 홈페이지 만들기 [6] | Gekkou | 2010.03.08 |
코어 1.5.1에서 회원목록에 성별아이콘 쓰기(수정) | 늘푸른이 | 2011.12.10 |
계정 용량 측정 소스 (펌) [1] | rjsoo | 2011.12.16 |
제로보드 xe 쇼핑몰 오늘본 상품 퀵메뉴 만드는 법 알려주세요 | 유유히 | 2011.12.15 |
1.5 에서 기존 로그인 스킨 이메일 로그인 구동시키기 [1] | 쿨키드 | 2011.11.01 |
외부에서 단독으로 xe게시판에 글 올리기, blogapi 기능 사용하여, [6] | 김기철980 | 2011.01.27 |
코어 1.5.1에서 회원정보에 성별아이콘 쓰기 | 늘푸른이 | 2011.12.10 |