XpressEngine에 관련 내용에 대해서 이야기 합니다.
Stop Forum Spam XE
해당 모듈은 http://www.stopforumspam.com/ 라는 스팸 ip, 스팸 email, 스펨 username을 사용자가 실시간으로 등록 갱신하며, 이를 API 서비스를 이용해서 대상 종류가 스팸인지 아닌지를 판별해 주는 스팸 대응 서비스를 이용하여 XE에 스팸 ip가 접근하지 못하도록 차단해주는 모듈 입니다.
- 2010.08.15 10:00 API 5,000쿼리 요청 후 다른 루트로 사용되는 내용 중 lastseen 값을 못가져오던 문제 수정
- 2010.08.15 01:11 죄송합니다. info.xml 오류 수정합니다.
- 2010.08.15 02:19 백그라운드에서 XE로의 API호출시 자기자신만 수행하도록 조치
- 2010.08.15 02:19 스팸대상이 아닌데 lastseen 시간이 생기는 오류 수정
Ver 0.2.3 (Beta)
- 2010.08.14
- 하루 API검색 요청건 제한 문제 임시 조치
- 검사수행의 간격을 설정하여 다중수행이 되지 않도록 조치
- 백그라운드에서 XE로의 API호출시 자기자신만 수행하도록 조치
- 검색기능 추가
설치요소
- 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에 스팸 등록을 직접 할 수 있습니다.
- 기록 간격(초)
매번 요청시 백그라운드가 수행되는 불필요한 사항으로 인해 간격을 정하면 간격내에 반복 요청자에 대해서는 백그라운드를 수행하지 않습니다.
- Header 선택
접근 거부인지, 대상을 찾지 못하는 건지 403, 404로 사용하게 했습니다. 아무거나 하셔도 무방합니다.
- 메시지
Header에 따라 간단하게 밑에 한줄 적어주시는 용도 입니다.
- API Key (예정)
http://www.stopforumspam.com/signup 이곳을 통해 Key를 발급 받으면 스팸이 아닌, 혹은 스팸이지만 중복으로 스팸 등록을 할 수 있습니다. Stop Forum Spam은 사용자가 직접 참여해서 관리할 수 있도록 되어있습니다.
- Stop Forum Spam에서는 하루 API 요청수를 5,000건으로 제한하고 있습니다.
제한을 당하게 되면 rate limit exceeded 라는 메시지로 거부되지만 어째서인지 FileHandler->getRemoteResource() 함수에서는 메시지를 표시하지 않네요.
일단 제한된 대상자는 임시적으로 다른 루트로 조회가 가능하도록 조치하였습니다.(속도는 살짝 느리지만 백그라운드라 본인 체감은 없습니다.)
- 검색기능을 넣었습니다.
대상 선택 필요없이 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에서 쪽지로 받습니다.