我們是在我們做早期的一個項目處理一些垃圾郵件問題,並防止垃圾郵件機器人用下面的簡單的概念。我現在想要把它變成一個更大的項目。我這樣做之前,我想對它進行優化,這個工作在同一個頁面上的多個形式,但是我沒有得到的伎倆又或者我不知道,如果它的價值重建成一個更復雜的版本,如果沒用這一點。
爲了澄清:我不想對付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
如果它發現並且/或者您的網站足夠流行,垃圾郵件發送者將會適應。並非全部都是,但他們會。 – tripleee