웹마스터 팁
무분별한 스팸글 등록으로부터 임시해결 팁
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
아...다시금 스팸이 올라오네요. 팁을 적용해도 뚫렸나봐요. 스패머들이 라르게덴님 소스도 분석을 해서 뚫었낭?^^
제목 | 글쓴이 | 날짜 |
---|---|---|
사용자 자동 등록 쉘스크립트 [1] | 편리 | 2002.11.05 |
윈xp pro 를 net 서버로 바꾸기
[7]
![]() | 정회철 | 2002.11.13 |
ab 를 이용한 간편한 아파치 성능 측정 [2] | 정인배 | 2002.11.15 |
리눅스 서버를 구축해 보자! #1 [11] | 꼬토 | 2002.11.21 |
리눅스 서버를 구축해 보자! #2 [5] | 꼬토 | 2002.11.22 |
Apache + PHP + Mysql확실한 연동 및 리눅스 재설치 정보
[2]
![]() | 최종우 | 2002.11.26 |
[FreeBSD] bind를 몰아낼 djbdns 설치하기 [5] | DeX™ | 2002.11.26 |
[FreeBSD] qmail+mysql+vpopmail+qmailadmin 설치 [1] | DeX™ | 2002.11.26 |
[계정삭제 스크립터] 편리님이 만드신 계정추가랑 연동됩니다.
[4]
![]() | 김동현 | 2002.12.04 |
계정 등록 스크립트 [8] | 편리 | 2002.12.05 |
레드햇(redhat)리눅스에서 rpm 관리 명령어 | 정인배 | 2002.12.09 |
리눅스 rpm 명령어 활용(1): MRTG 설치 | 정인배 | 2002.12.14 |
초보자도 쉽게 이해할수있도록 주석을 자세히 달아놓은 APM 메뉴얼 (3 of 3) [2] | Dopesoul | 2002.12.21 |
무료 호스팅 서버 만들기 -3부 | 장동민 | 2003.01.04 |
보안쉘 ssh | Dopesoul | 2003.01.13 |
[Lindox] cron - 기본편[수정] [6] | NeSTY♨™ | 2003.01.18 |
htaccss를 활용하자! 1탄 에러페이지 만들기 [10] | [쿨럭]블루엔젤 | 2003.01.23 |
[JSP설치2탄]mod_jk를 이용한 Apache와 Tomcat의 연동[for Windows98/NT/2000] [1] | 한희진 | 2003.02.06 |
레드햇 8.0 에 젠드옵티마이져(Zend optimizer) 2.1.0 설치-왕초보용 [7] | 정인배 | 2003.02.13 |
php-accelerator <- zend보다 빠른 phpcache [6] | 푸른하늘 | 2003.02.20 |