특정한 단어를 스팸 키워드로 지정하여 해당 키워드가 작성한 컨텐츠(본문,댓글)에 포함이 되었는지 확인후 검출이 된다면 등록을 차단하는 방식입니다. 그런데 이 작성한 컨텐츠 중 태그를 제거한 후 검사를 하게 되는데 이부분에서 문제가 조금 발생합니다.
이러한 방식으로 변경된 이유가 태그를 이용해 해당 단어를 회피하는 경우 때문이라고 하더군요.
스팸 이라는 단어가 필터링 대상으로 등록되어있을 때
<span>스</span>팸 이렇게 작성을 하면 해당 키워드를 보여주면서 우회할 수 있다는 이유였는데요. 저는 살짝 이부분에 대해서 많은 공감은 가지 않습니다. 다른 방식으로 우회하는 경우도 많기때문에... 보이는 것이 일치하기 때문이라는 이유는 설득력이 좀 떨어집니다.
스_팸 이런식으로 작성해도 보이기에는 달라 보여도 의미는 충분히 우회해서 그 단어를 사용한 것이고 사용하지 말라는 것에 반하기 때문인데요.
그런데 이부분 보다 조금더 심각? 한 애로사항이 벌어집니다.
특정 태그의 style 속성등이 스팸성 컨텐츠를 통째로 숨겨서 작성할 수 있는데 이 속성에 대해 금지할 방법이 없다는 것 입니다.
display:none, with:1px 등 이런 속성을 엘리먼트에 사용하여 엘리먼트 안에 스팸성 링크 등을 수십개 숨겨서 작성을 합니다. 도가 지나쳐서 게시글 열람시 시간이 과다하게 발생하는 경우는 눈치챌 수 있지만 그렇지 않은 경우는 찾아내기 쉽지 않습니다. db에서 주기적으로 검색을 한다면 찾아지겠죠.
그리고 특정 도메인으로 향하는 링크의 경우 제한하고자 할 경우도 애로사항이 발생할 수도 있습니다.
제가 내린 결론은 검사를 두번 하는 것으로 내렸습니다.
태그를 제외한 검사, 태그를 제거하지 않은 본문,댓글의 내용으로 한번 더 검사 입니다.
태그를 제거하지 않은 검사시에 컨텐츠의 일부를 가리기위한 속성을 모두 걸러낼 수 있기 때문입니다.
따라서 개인적으로는 애드온으로 금칙어 검사를 하게 하고 이때 작성된 컨텐츠를 태그제거한 후 한번 그리고 태그 제거하지 않고 한번 2번 검사해서 모두 찾아내고 있습니다.