오늘은 수업이 2시에 시작하는데 어쩌다보니 아침 8시에 일어나게 되서… 그걸 기념하고자 스팸 룰을 하나 더 추가했습니다.
다들 이미지 하나 딸랑 있는 메일을 보신 적이 있을거라 생각합니다. 정상적으로 의미가 담긴 메일 중에는 그런 성의 없는 메일이 많지 않으므로 이걸 이용하기 위해 간단한 스크립트를 하나 작성했습니다. 스크립트는 메일 내용에서 <!–….–> 식의 주석을 먼저 제거하고, script, style, title 등 안에 별 의미 없는 스트링을 제거한 후 마지막으로 태그들을 제거하는 역할을 합니다. (title 에 나오는 내용이 의미없다는 말은 아니지만 메일에선 의미 없다고 봐도 될거라고 생각합니다.)
위의 스크립트를 통해 html 이 모두 제거된 후 white space 를 제외하고 스트링이 남아있는지 없는지를 판단합니다. 이미지 만으로 이루어진 메일의 경우엔 bogofilter 등에서 활용할 만한 내용이 없기 때문에 이런 식의 처리를 추가하게 된 것인데 효과는 얼마나 될지 모르겠습니다.
뭐 하튼 태그를 제거하는 스크립트는 아래 url 에서 보실 수 있습니다. 정규표현식으로 처리했기 때문에 무척 간단해보일 겁니다 (그러고 보니 예전에 오토마타로 짜놓았던 녀석이 있었군요 -_-)
http://mytears.org/resources/mysrc/php/removehtml/strip_html.phps
p.s) 생각보다 효과가 탁월합니다. -_- 많이들 걸리는군요.
Tag: idea
Spam filter #1
불량 단어 목록을 만들고 procmail 을 통해 무식하게 matching 시키는 방법을 사용하고 있다보니, 첨부파일이 있는 경우 스팸이 아닌데도 불구하고 스팸으로 판단되는 경우가 너무 잦은 것 같습니다.
sex, viagra, … 등의 불량단어 목록을 대소문자 구별없이 매칭을 시켜서 거르고 있는데, 첨부파일이 BASE64 로 인코딩된 경우에 저런 단어들이 포함될 확률이 상당히 높나 봅니다. 보내는 사람 관련해서 white list 를 만들어서 어떻게든 피해나가고 있긴 하지만 이건 답이 아닌 거 같네요.
시험이 끝나고 나면 꼭!! 시간을 내서 스팸 필터를 조금 더 개선시켜야 겠습니다.
본문을 fetch
multipart/alternative, multipart/mixed 인 경우 … text/html, text/plain 인 것들만 fetch
%2digit 형식으로 된 것들을 디코드
[php:urldecode] 를 이용
utf-8 로 변환
php 의 [php:iconv] function 들은 conversion 도중에 에러가 발생했는지 알기 힘드므로 다른 프로그램을 이용…
&#digit; 형식으로 된 것들을 디코드
[php:html_entity_decode]
불량단어 목록과 매칭
매칭 결과 리턴
대강 위와 같은 기능을 하는 filter 를 작성하고 procmail 과 연동해서 필터링을 해볼까 싶습니다. 다만 귀차니즘 때문에 언제나 구현할 지 모르겠군요. (백업 스크립트는 도대체 언제 짤건데!!)
오묘한 procmail 세상…
마이크로 소프트웨어 1월호를 읽던 중 spam 관련된 기사가 몇 개 실렸길래 재밌게 읽어봤습니다. 불량단어 목록을 외부로 빼서 필터링하는 기법이 소개되었더군요. 웹을 통한 관리까지는 도입할 생각이 없지만, 단어 목록을 외부로 빼면 좀 더 관리가 편해질 듯 하더군요.
뭐 하튼 이래저래 해서 오랫만에 procmail 로 구글링을 해봤습니다. 그러다가 맘에 드는 procmail rule 관련 사이트를 찾아냈습니다!
Continue reading 오묘한 procmail 세상…
이미지만으로 도배된 스팸
스팸들을 보다보면.. 내용은 하나도 없이 이미지 만으로 혹은 첨부파일 하나 딸랑 오는 메일들이 상당히 많다. 당연히 이미지 안에 내용을 전부 넣어버리기 때문에 필터링할만한 문자열이 아예 없다 -_-!! 그래서 생각인데 tag 를 깨끗이 비워버리고 trim 을 해보면 이런 메일들을 쉽게 거를 수 있지 않을까 싶다.
- title,style,script,object ~ /title,style,script,object 를 제거..
- 나머지 태그들을 깨끗이 제거!!
- trim
이 정도로만 해도 이미지로 도배된 스팸들은 다 거를 수 있지 않을까 싶은데… 뭐 역시나 귀차니즘이 문제 (어제 12시에 자러간 이후 지금까지 내 메일계정으로 온 스팸 중엔 스팸필터를 통과한 게 하나도 없다.. 친구껄로 온건 몇 개 있는거 같지만 -_-!!)
또한 본문을 seperator 기준으로 잘라서 토큰으로 만든 후… 영어로만 이루어진 토큰에 한해 spellcheck (aspell 같은걸 쓰면 되니까) 를 하고, spell 에 맞지 않는 것들의 수가 일정 % 이상이라면 스팸이라고 판단하는 방식도 유용하지 않을까 싶다.