Sahte Formu Girişleri Engelleme

0 Cevap php

Biz insanlar için küçük bir tazminat anketler almak için kayıt olabilirsiniz bir kayıt formu var. Son zamanlarda şüpheli girdilerinin bir sürü bulundu. Ben google çevrilir ve bu temelde Çince bir site aşağı izlenen bir "nasıl" sitelerin bu tür kaydolmak için. Ben otomatik olarak sahte olanları beri kapalı filtre için bir yol izini çalışıyoruz.

Kayıt umarım olmayan insanları engellemek için bir "captcha'yı" vardır, ama girilen verilerin birçok durumda son derece gerçekçidir. Anket barmenler için ve tüm alanları meşru konumları ve adresleri kullanılarak doldurulur. Telefon numaraları kapalı olabilir, ama bir hücre kullanarak ve alana taşınmış olabilir. Ben aşağıdaki işlevi kullanarak IP bilgileri ve ülke verileri ile ekrana çalışıyorum:

// this function is necessary since allow_url_fopen is disabled by default in php.ini in PHP >5.
function my_file_get_contents($file_path) {
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $file_path);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 1);
    $buffer = curl_exec($ch);
    curl_close($ch);
    return $buffer;  
}

function getInfoFromIP(){

// get correct IP in case of a proxy
if (!empty($_SERVER['HTTP_CLIENT_IP'])){                   // shared ip
    $real_ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){       // ip is from proxy
    $real_ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else{
    $real_ip=$_SERVER['REMOTE_ADDR'];
}

//verify the IP address for the
ip2long($real_ip)== -1 || ip2long($real_ip) === false ? trigger_error("Invalid IP Passed: ", E_USER_ERROR) : "";

$ipDetailArray=array(); //initialize a blank array
$ipDetailArray['ip'] = $real_ip; //assign ip number to the array

//get the XML result from hostip.info using custom lookup function
$xml = my_file_get_contents("http://api.hostip.info/?ip=".$real_ip);

//regex to get the country name from <countryName>INFO</countryName>
preg_match("@<countryName>(.*?)</countryName>@si",$xml,$countryInfoArray);
$ipDetailArray['country'] = $countryInfoArray[1];    //assign country name to the array

//get the country name inside the node <countryName> and </countryName>
preg_match("@<countryAbbrev>(.*?)</countryAbbrev>@si",$xml,$ccInfoArray);
$ipDetailArray['country_code'] = $ccInfoArray[1];     //assign country code to array

//return the array containing ip, country and country code
return $ipDetailArray; 
}

Sonra elle kontrol ve (bar ve anket girenlerin katılmak için nerede olması gerektiğini olan) ABD dışında göstermek olanları kaldırarak oldum. HALA (eminim sahte olan değilim) ABD merkezli IP'leri ile listelenen şüpheli olanları çok buluyorum.

Değil emin eğer benim kod eksik veya daha iyi bir çözüm varsa ben bulmak mümkün olmamıştır. Teşekkürler

0 Cevap