XpressEngine에 관련 내용에 대해서 이야기 합니다.
Stop Forum Spam XE
해당 모듈은 http://www.stopforumspam.com/ 라는 스팸 ip, 스팸 email, 스펨 username을 사용자가 실시간으로 등록 갱신하며, 이를 API 서비스를 이용해서 대상 종류가 스팸인지 아닌지를 판별해 주는 스팸 대응 서비스를 이용하여 XE에 스팸 ip가 접근하지 못하도록 차단해주는 모듈 입니다.
- 2010.08.28
- Shell 처리를 ajax용 함수로 처리되었던 문제 수정
- AJAX 처리용 javascript의 로딩 조건 중 json 비교내용 오류 수정
- lastseen 날짜 표기 오류 수정
설치요소
- Stop Forum Spam XE (모듈)
- Stop Forum SPam XE Addon (애드온)
설치조건
해당 모듈은 모듈, 애드온 모두 각개의 운영이 가능합니다. 하지만 두개를 같이 사용했을시에 좀 더 나은 성능을 나타냅니다.
해당 모듈은 페이지 로딩 성능을 위해 Shell Background(shell_exec)를 이용하도록 되어있기 때문에 만약 웹호스팅사가 저 기능을 막아놨다면 사용이 불가능합니다.(대신 애드온으로만 사용가능)
설치방법
- 첨부파일을 다운로드해서 압축을 풀면 stopforumspam 이라는 모듈이 나온다(폴더생성으로 풀지말고 바로 푸세요)
- FTP나 설치된 XE의 modules 폴더안에 해당 폴더를 복사한다.
- 해당 폴더안에 config라는 폴더의 퍼미션을 707 or 777로 변경한다.(modules/stopforumspam/config/ 경로)
- XE 관리자 페이지에서 모듈 설치를 한 후 좌측 부가기능설정 메뉴에 있습니다.
- XE 관리자 페이지에서 애드온 설정에 가서 Stop Forum Spam Addon을 활성화한다.(세부 속성 설정은 4번만 하면 됩니다.)
설정방법
- 스펨종류
ip, email, username 3가지로 분류 됩니다. ip는 글 등록부터 모든 접근에 해당하며 email과 username은 글등록 시 사용하는 email과 이름을 검사할때 사용합니다.(현재 초기버전이라 ip밖에 안됩니다.)
- 기록종류
API를 통해 해당 ip, email, username이 스팸이라면 yes 아니라면 no를 보내는데 이 정보를 기록할지 여부입니다.
스팸을 기록시켜놓는 이유는 위 서비스 사이트를 접근하기 전에 한번 접근했었던 기록을 가지고 이를 우선으로 판단합니다.
기록은 Stop Forum Spam에서 매번 갱신되는지라 어제는 안전한 정보가 오늘 스팸이 될 수 있기 때문입니다.
비 스팸의 경우는 차후 이것이 스팸이라고 개인 판단이 들면 API Key를 통하여 Stop Forum Spam에 스팸 등록을 직접 할 수 있습니다.
- 기록 방식
Shell 백그라운드가 지원되지 않는 사용자를 위해서 AJAX를 이용해서 처리하는 방법을 추가했습니다.
다만 AJAX로 할경우 자바스크립트가 거부한채 접근하는 경우나 스팸IP가 정상IP로 되었을 경우의 확인이 어렵습니다.
- 기록 간격(일)
매번 요청시 백그라운드가 수행되는 불필요한 사항으로 인해 간격을 정하면 간격내에 반복 요청자에 대해서는 백그라운드를 수행하지 않습니다.
- Header 선택
접근 거부인지, 대상을 찾지 못하는 건지 403, 404로 사용하게 했습니다. 아무거나 하셔도 무방합니다.
- 메시지
Header에 따라 간단하게 밑에 한줄 적어주시는 용도 입니다.
- API Key (예정)
http://www.stopforumspam.com/signup 이곳을 통해 Key를 발급 받으면 스팸이 아닌, 혹은 스팸이지만 중복으로 스팸 등록을 할 수 있습니다. Stop Forum Spam은 사용자가 직접 참여해서 관리할 수 있도록 되어있습니다.
- 지정시간(분)
지정시간 동안에 요청수를 확인하여 처리합니다. 지정시간이 지나면 요청된 수는 초기화 됩니다.
- 접속횟수
지정시간동안에 접속하는 수 입니다. 해당 횟수를 넘어가게되면 접속을 차단시킵니다.
- act접속횟수
접속횟수와 별도로 한곳에서 계속적인 요청이 있을 경우 접속을 차단시킵니다. (접속횟수보다 적은 수를 넣어주세요.)
- 차단시간(분)
접속횟수이상 접근할 경우 얼마간 차단할지 정합니다. (index를 이용하게되면 차단에 대한 성능을 올릴 수 있습니다. 밑에 설명)
stopforumspam.index.php를 이용하면 차단 성능을 올릴 수 있습니다.
스팸일 경우나 연속 접근으로 차단 된 경우 차단되었음에도 연속적으로 접속시도를 하기 때문에 서버의 자원을 소비할 수 밖에 없습니다.
xe/index.php에 아래의 코드를 삽입하게 되면 XE처리가 수행되기전에 차단을 할 수 있습니다.
차단 운영방법 또한 차단되었음에도 연속으로 10건 접근하면 차단 시간을 두배씩 증가 시키도록 하였습니다.
(단, 쿠키를 이용한것이기 때문에 상대방 스팸.로봇이 쿠키를 사용하지 않는 것이라면 효과는 없습니다.)
* @brief 기본적인 상수 선언, 웹에서 직접 호출되는 것을 막기 위해 체크하는 상수 선언
**/
define('__ZBXE__', true);
/**
* @brief Refresh, 트래픽 유발 공격 대응
**/
define("_SFS_PATH_", str_replace("index.php", "", str_replace("\\", "/", __FILE__)));
require_once(_SFS_PATH_."modules/stopforumspam/stopforumspam.index.php");
/**
* @brief 필요한 설정 파일들을 include
**/
require('./config/config.inc.php');
@brief Refresh, 트래픽 유발 공격 대응 주석아래의 두줄을 index.php에 삽입하세요.
- API 요청수를 대폭 줄였습니다. stopforumspam.net에서 한국(특히 이 모듈에서)에서 100,000건의 요청이 들어와서 몇개를 블럭시킨 상태입니다. API 요청수를 대폭줄여서 상호 부담이 가지 않도록 해서 블럭걸리신 분들도 해제할 수 있도록 하겠습니다.
- AJAX를 이용한 처리 방법을 추가하였습니다. 기존에 shell이 동작하지 않던 호스팅에서도 사용이 가능하게 되었습니다.
다만 어디까지나 자바스크립트를 이용한 방법이라 스팸측에서 자바스크립트를 이용하지 않고 접근한다면 수행이 안될 수가 있습니다.
- 검색기능을 넣었습니다.
대상 선택 필요없이 Y, 아이피, 이메일, 유저이름 등 알아서 정보가 맞으면 출력합니다. 특히 Y로 검색해서 스팸이 몇개 걸러냈는지 확인해보시는것도 좋겠네요.
- 간단하게 로그를 볼 수 있게 하였습니다.
ip,
email, username을 보실 수 있고요, 스팸인지 아닌지 판단여부와 스팸 등록의 최종 갱신일, 스팸의 심각성(신고 횟수)
등을 보실 수 있으며 이곳에서 바로 직접 선택하여 신고 할 수 있는 기능을 만들려고 합니다. (지금은 간단히 삭제밖에 안되요.)
- 성능을 위해 Shell이 사용되었는데 그 부분으로 인해 첫번째 스팸 대상자는 검사를 하지 않습니다.
처음 스팸 대상자는 검사없이 통과되면서 백그라운드에서 스팸 확인이 되면 스팸 등록을 하게 되고 2번째 접속부터 차단이 됩니다.(실력부족이라 살을 내주고 뼈를 취하고 있습니다. -_-)
주의!
- 백그라운드로 한 이유는 페이지 로딩 시 외부 사이트에서의 응답을 받은 후 완료 하느라 로딩이 걸립니다.(1.5배에서 2배정도로 눈에 띕니다. 이를 극복하고자 shell 기능을 사용했고요. 서버 프로세스 부분이라던가 자원의 메모리 활용등 아직 검사를 하지 못했습니다.
- 제 웹호스팅에서는 Shell 기능이 잘 동작하고 있네요.
- Windows의 경우는 (특히 APM_Setup으로 하시는 분들!) php.ini파일이 APM_Setup폴더에도 있지만 Windows, Winnt 폴더에도 복사해두셔야지 Shell 동작이 가능해지니 이점 참고하세요. (php -q a.php 명령이 먹어야 합니다.)
문의는 http://www.animeclub.net/zbXE나 xpressengine.com에서 쪽지로 받습니다.