2013-01-09 56 views
1

介紹這個簡單的概念是否對垃圾郵件有效? (需要優化?)

我們是在我們做早期的一個項目處理一些垃圾郵件問題,並防止垃圾郵件機器人用下面的簡單的概念。我現在想要把它變成一個更大的項目。我這樣做之前,我想對它進行優化,這個工作在同一個頁面上的多個形式,但是我沒有得到的伎倆又或者我不知道,如果它的價值重建成一個更復雜的版本,如果沒用這一點。

爲了澄清:我不想對付CAPTCHA或類似的東西。只要做一個本地解決方案。

概念

如果用戶聚焦形式的AJAX的查詢將被髮送,其中一個隨機散列標籤將被產生並存儲到$_SESSION變量的任何input字段。該散列也將被寫入到稱爲spamKey(例如)一個隱藏的輸入字段。

用戶提交表格後,我檢查$_SESSION["spamKey"]變量是否等於$_POST["spamKey"]變量,所以我決定處理查詢與否。

代碼

簡單形式

<form action="index.php" method="post" id="formOne"> 

    <label for='input_eins'>Name</label> 
     <input type='text' id='input_eins' name='name' /> 
    <label for='input_user'>E-Mail</label> 
     <input type='text' id='input_user' name='user' /> 
    <label for='ta_text'>Comment</label> 
     <textarea name='text'></textarea> 
    <label for='input_spamKey'>spamKey</label> 
     <input type='text' id='input_spamKey' name='spamKey' /> 
    <input type='submit' value='Senden'> 
</form> 

的script.js(使用jQuery)

var spamKey = false; 
$("#formOne > input").focus(function() { 
     if(spamKey == false) { 
     dataString = "action=getSpamKey"; 
     $.ajax({ 
      url: 'asyncresponse.php', 
      data: dataString, 
      type: "POST", 
      success: function(data) { 
       $("#input_spamKey").val(data); 
       if(data != "") { 
        spamKey = true; 
       } 
       } 
     }); 
    } 
}); 

asyncresponse.php(信息:後變量被消毒)

if($_POST["action"] == "getSpamKey") { 
    $spamKey = md5(time().microtime()); 
    $_SESSION["spamKey"] = $spamKey; 
    echo $spamKey; 
} 

例行檢查在PHP

($_SESSION["spamKey"] == $_POST["spamKey"] && !empty($_SESSION["spamKey"])) 

好 - 什麼我的問題?

哪些步驟,你會建議我來保護多種形式?並且可能是一個基本問題 - 這是處理垃圾郵件問題的有效解決方案嗎?

感謝您的幫助提前。

一個簡單的演示中,你可以在這裏找到: http://godesign.ch/labor/antispam/index.php

+0

如果它發現並且/或者您的網站足夠流行,垃圾郵件發送者將會適應。並非全部都是,但他們會。 – tripleee

回答

1

驗證碼曾經是防止垃圾郵件的有效方法。它現在打破,因爲它被廣泛實施,創造了經濟激勵,打破它(谷歌「驗證碼打破」)。

我已經看到了這種方法是有效的項目。你冒險某個人在某個時候會被動機打破它。正確實施,我相信它在這個時候提供合理的防範垃圾郵件。

+0

我同意。它會阻止偶然的垃圾郵件發送者和自動發佈腳本。它不會停止的是一個腳本化的無頭瀏覽器。 –

+0

@Eric J. - 感謝您的回答,有趣的是,讀取驗證碼已損壞。所以這似乎值得以此爲出發點。 – wildhaber

+0

@Diodeus - 有沒有辦法檢測這些瀏覽器?他們有沒有任何身份證明?他們可能太快填寫表格以便我可以測量時間? – wildhaber