2012-10-03 55 views
2

我一直在瀏覽所有關於此主題的建議帖子,但似乎無法找到解決方案,或者對我有用,或者我很理解。使用PHP和AJAX的簡單蜜罐形式檢查

我只是想做一個簡單的蜜罐,它檢查一個隱藏的字段是否被殭屍程序填充,如果是的話就打破窗體。我的問題似乎是,當涉及到使用AJAX來查看PHP值是否被清除。希望這是有道理的,因爲我不熟悉編碼語言。

我最初的想法是禁用任何填充字段的機器人的提交按鈕。然而,當字段空白時直接看到表單加載提交按鈕並且點丟失。

這是形式的檢查的機器人部分:

<!-- THE HONEYPOT --> 
<li id="artificial-detect"> 
     <label for="artificials">If you see this, leave this form 
     field blank and invest in CSS support.</label> 
     <input name="artificials" type="text" value=""> 
</li> 
<!-- /HONEYPOT --> 

<?php 
$spam = $_POST['artificials']; // This is our Honeypot field 
if($spam) { // If the Honeypot field has been filled in 
    die("No spamming allowed bitch!"); 
} else { ?> 
<li class="last"> 
     <input class="submit" type="submit" name="submit"> 
</li> 
<?php } ?> 

我不明白現在做什麼:

jQuery.('#salesforce-crm-form .submit').click(function(){ 
    jQuery.ajax({ 
    // Get PHP function that determines whether the honeypot has been snatched. 
    }); 
}); 

我使用的是外部URL的行動= 「」所以我想也許這隻能在PHP返回乾淨機器人時插入。

回答

2

你不能按照你想象的順序去做這件事。

第一個PHP運行提供您的表單。

然後瀏覽器動作,向用戶顯示錶單。他可能會輸入數據並將其發回。

然後PHP再次打開,檢查表單值。

你幾乎有你想要檢查蜜罐字段是否填充的代碼。您不應該嘗試使用AJAX,因爲此PHP檢查只能在發送表單後進行。如果您檢測到垃圾郵件,則不要執行表單打算執行的操作。

順便說一句,機器人不要按提交按鈕。機器人基於解析表單發送請求,禁用所有Javascript。

[編輯] 如果您的表單轉到外部URL,那麼您無法控制任何垃圾郵件檢測。因爲機器人不使用Javascript,所以這個級別上的任何東西都不會工作,但那就是你想要做的。

唯一可行的是不直接發送表單到外部URL,而是發送到服務器上的一個PHP腳本,該腳本將檢查垃圾郵件並將其發送到原始目的地。不知道這是否會弄亂其他任何東西,因爲現在不是用戶瀏覽器發送表單,而是你的服務器。如果在這方面有任何檢測和/或使用請求元數據,那麼您正在干涉這一點。

1

將默認值放入蜜罐輸入中,並要求用戶在發佈前刪除它。也沒有用於禁用提交按鈕:)機器人不以這種方式工作,他們只會提交表單而不點擊任何東西。

0

如果改變輸入框的類型爲隱藏,並給它一個ID,像這樣

<input name="artificials" type="hidden" id="honeypot" value="">

那麼用戶將無法看到輸入,但機器人將填補進去。

然後,在JavaScript,使用jQuery你可以檢查一個值,像這樣

var honeypot = $('#honeypot').val(); 
if(honeypot == '' || honeypot == null) { 
    // Call ajax function 
} 

注意,還沒有經過測試,僅僅是一個例子。