Textcube에서 리퍼러 기록을 볼 때 스팸 로그를 보지 않기

By | 2009/08/22
  1. 리퍼러 기록에서 스팸 문제점
  2. 나만 이런가?
  3. 그렇지 않더라.
  4. 스팸 필터라는 것이 있더라.
  5. 코드 추가 및 수정
  6. 결과물
  7. 해당 파일 공개

  Textcube에서 리퍼러 기록을 보면 이상한 곳이 리퍼러로 잡힙니다. 살펴보면 자동으로 다른 곳으로 이동하는 광고 사이트입니다. 즉, 리퍼러 기록으로 스팸을 날리는 것입니다. 그런데 그것이 은근히 양이 많습니다.

c3

  제 리퍼러 로그의 일부입니다. 저렇게 몇 개씩 스팸 리퍼러가 남습니다. 즉, 필요 없는 리퍼러 로그를 보아야 합니다.

  혹시 이것은 저만 그런 것인가 싶어 TNF에 물어보았습니다.

리퍼러를 통한 스팸이 있을까요?

  그러자 많이 있다는 답변을 얻었습니다. 즉, 저만의 문제가 아닌 것입니다.

  이를 어떻게 해결할까 고민하다가 스팸 필터라는 것을 발견하였습니다. 그 중 홈페이지 필터링이라는 것이 있는데 댓글이나 트랙백에 해당 홈페이지가 있다면 스팸으로 간주하는 기능입니다. 이것을 이용한다면 리퍼러 스팸 로그도 해결할 수 있을 것이라 생각하였습니다.

  따라서 리퍼러 로그를 출력하는 플러그인 파일을 수정하였습니다.

  1: /*
  2: 만든이 : NoSyu <dongdm@nospam@skku@.edu>, 2009.08.21
  3: 만든 이유 : 스팸 필터를 이용하여 리퍼러 출력시 스팸 로그 보여주지 않기.
  4: 소감 : 만든 시간이 2시간 가량이기에 정말 한심한 로직을 가졌음.
  5: */
  6: function MakeFilterURLList()
  7: {
  8: 	requireComponent('Textcube.Data.Filter');
  9: 	$filter = new Filter();
 10: 	$filtersList = array();
 11: 	$filtersURLList = array();
 12: 	if ($filter->open('url', 'pattern'))
 13: 	{
 14: 		do
 15: 		{
 16: 			$filtersList[] = array(0 => $filter->id, 1 => $filter->pattern);
 17: 		} while ($filter->shift());
 18: 		$filter->close();
 19: 	}
 20: 	
 21: 	if ($filtersList)
 22: 	{
 23: 		foreach ($filtersList as $value)
 24: 		{
 25: 			array_push($filtersURLList, $value[1]);
 26: 		}
 27: 	}
 28: 	
 29: 	return $filtersURLList;
 30: }
 31: 
 32: function CheckRefererUsingFilterURL($filtersURLList, $url)
 33: {
 34: 	foreach ($filtersURLList as $needle)
 35: 	{
 36: 		// url이 filtersURLList에 존재하면...
 37: 		if(stristr($url, $needle))
 38: 		{
 39: 			return True;
 40: 		}
 41: 	}
 42: 	
 43: 	return False;
 44: }

  위와 같은 함수를 만든 후 리퍼러 로그에 출력하는 코드에서 CheckRefererUsingFilterURL 함수를 실행하여 스팸 여부를 판단하여 출력 여부를 판단합니다. 참으로 단순하게 만들었기에 로직면이나 성능면이나 참으로 안 좋습니다.

c5

  이렇게 홈페이지 필터링에 스팸 로그 홈페이지를 등록하였습니다. 그러고 리퍼러 기록을 보면 해당 로그가 보이지 않는 것을 확인할 수 있습니다.

c4

  하지만 이처럼 20개를 찍지 못합니다. 이는 기존의 코드가 20건을 표시하라고 하면 20개를 가져온 후 하나씩 찍도록 되어있기에 저는 20개를 가져온 후 스팸이 있는 것을 걸러낸 후 나머지 것을 출력하도록 되어 있습니다.

  궁극적으로는 리퍼러 로그도 트랙백과 댓글처럼 스팸 필터를 적용하게 하여 DB에서 지우던가 휴지통으로 이동하던가 해야지 잘 해결되리라 생각합니다.

  수정한 코드 파일입니다. tc/plugins/PN_Referer_Default입니다. tc/plugins 폴더에 압축을 푸시면 됩니다.

  참 쓸모 없는 개선이지만 조금이나마 도움이 되기를 바랍니다.^^

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.