เล่นง่ายๆ กับเช็คว่า ip, e-email หรือ username ที่สมัครสมาชิกเข้ามาเป็น spammer หรือไม่?

ช่วงนี้เจอเรื่องปวดหัวเกี่ยวกับ spam ใน forum เยอะมาก ตอนนี้เลยใช้วิธีง่ายๆ ไปก่อนผ่าน http://www.stopforumspam.com ก็กันได้ในระดับนึง แต่ว่ามี API Limit อาจจะต้องหาวิธีอื่นๆ แก้ไขเฉพาะหน้ากันต่อไป คิดว่าน่าจะพอไหวอยู่

  1. function is_forumspam_objectsIntoArray($arrObjData, $arrSkipIndices = array()) {
  2.   $arrData = array();
  3.  
  4.   // if input is object, convert into array
  5.   if (is_object($arrObjData)) {
  6.     $arrObjData = get_object_vars($arrObjData);
  7.   }
  8.  
  9.   if (is_array($arrObjData)) {
  10.     foreach ($arrObjData as $index => $value) {
  11.       if (is_object($value) || is_array($value)) {
  12.         $value = is_forumspam_objectsIntoArray($value, $arrSkipIndices);
  13.       }
  14.       if (in_array($index, $arrSkipIndices)) {
  15.         continue;
  16.       }
  17.       $arrData[$index] = $value;
  18.     }
  19.   }
  20.   return $arrData;
  21. }
  22.  
  23. /**
  24. http://www.stopforumspam.com/api?ip=91.186.18.61
  25. http://www.stopforumspam.com/api?email=g2fsehis5e@mail.ru
  26. http://www.stopforumspam.com/api?username=MariFoogwoogy
  27. **/
  28. function is_forumspam($var) {
  29.  
  30.   $var['email'] = urlencode($var['email']);
  31.  
  32.   $q = 'username='.$var['username'].'&email='.$var['email'].'&ip='.$var['ip'];
  33.  
  34.   $xmlUrl = "http://www.stopforumspam.com/api?".$q."&f=xmldom";
  35.  
  36.   $xmlStr = file_get_contents($xmlUrl);
  37.  
  38.   $xmlObj = simplexml_load_string($xmlStr);
  39.  
  40.   $arrXml = is_forumspam_objectsIntoArray($xmlObj);
  41.  
  42.   if($arrXml['ip']['appears'] == 1)
  43.     return true;
  44.   if($arrXml['email']['appears'] == 1)
  45.     return true;
  46.   if($arrXml['username']['appears'] == 1)
  47.     return true;
  48.  
  49.   return false;
  50. }

อ้างอิงจาก http://www.stopforumspam.com

Leave a Reply