2011-04-04 40 views
7

想知道是否有人知道如果垃圾郵件機器人能夠提交表單,如果沒有提交按鈕在頁面上。只是試圖做一些非常基本的垃圾郵件預防,而不使用驗證碼。我們的想法是,如果用戶以某種方式與表單交互,則使用jQuery來呈現提交按鈕。任何想法將不勝感激。如果頁面上沒有提交按鈕,垃圾郵件機器人能否提交表單?

+0

我認爲你不應該重新發明輪子... 一切都可以繞過和黑客入侵,問題是你的網站真的有這種危險嗎?最好的事情將是有服務器deffence以及。但安捷倫...一切都可以繞過 – 2011-04-04 20:30:04

+1

我讀到了一個欺騙垃圾郵件機器人的另一種方法,那就是向你的表單添加隱藏字段,以便正常人不會修改/發佈到服務器。垃圾郵件機器人很可能會填寫這些字段,在這種情況下,您可以檢測到這一點並拒絕他們發佈的任何內容。 – I82Much 2011-04-04 20:34:38

+2

@guy:恰恰相反。在這裏,重新發明輪子將防止他對非專門的垃圾郵件。 – SLaks 2011-04-04 20:36:49

回答

10

由圍繞WebKit或其他瀏覽器核心的代碼包裝組成的spambot可以強制執行DOM「submit()」,或者(甚至更激進)啓動它自己的POST事務。

最好把spambot想象成一個強大的邪惡機器人,它的瀏覽器不遵循原子能束附加到機器人大腦的規則。但是它是一個不能很好地閱讀的機器人。

2

是的,這是可能的,一個機器人不需要提交按鈕。

如果您有(pseudohtml):

<form action="POST" target="posting.php"> 
<input name="something"/> 
<!-- some logic for the submit button --> 
</form> 

的機器人可以簡單地解析form標籤並在窗體字段的名稱和發佈它自己的POST,從來沒有接觸提交按鈕。

1

是的,他們可以。按鈕沒有完全必要:

$('#form_id').submit(); /* This is a jQuery trigger */ 

但機器人可能是討厭的,並出具了自己 POST請求到服務器,因爲它不是很難的事。

但是,如果您創建了一個<input type="hidden" />帶有jQuery的secret-ish值(由服務器知道併爲每個會話動態檢索),並且只有在該值存在時才接受提交,則會停止所有未啓用JS的機器人。

缺點是,你會阻止非JS功能的用戶使用你的網頁。但這是你必須爭取殺死垃圾郵件發送者的持續戰鬥...

+0

我想我們可以放心地說,Javascript被禁用的真實情況可以忽略。你能舉出一個不涉及這個人的實際案例:http://dailyyeah.com/wp-content/uploads/2010/05/unix-based-computer-reboot.jpg? – korona 2011-04-04 20:35:04

+1

^這包括所有Mac用戶。 (我使用Linux,所以我被排除在外)。但是你有沒有聽說過NoScript Firefox插件?它阻止JS運行,直到你允許它,並且它非常流行,所以我在設計時仍然會考慮沒有JavaScript的人。 – Blender 2011-04-04 20:37:31

0

從未編碼垃圾郵件機器人,我只能做出假設。但我會假設提交按鈕的存在並不會真正有效。更可能的是,它正在查看<form> -tag並根據該位置確定是否應該發出POST/GET請求。一個更好的選擇(但決不是傻瓜)將不使用<form>,但手動做一個$ .post(因爲你提到使用jQuery),當你點擊一個按鈕或鏈接,收集POST數據在飛行中的元素。

6

一個機器人絕對能找到你的帖子按鈕,如果不經常。

非常流行的方法類似你正在嘗試創建一個蜜罐表單元素。表單上的可編輯蜜罐字段對人們是不可見的(您可以使用jQuery/CSS來隱藏這些表單元素)。它們在表單數據發佈時進行驗證,如果它們包含任何輸入,則提交者必須是某種類型的bot。

使用隱藏的字段名稱,驗證也可以停止這些漫遊器。如果電子郵件字段必須有@符號,並且機器人無法確定哪個字段是電子郵件,哪些字段不是電子郵件,那麼它將成功發佈郵件的機會大大減少。

+0

恰恰是我在「Pragmatic Programmers」雜誌上閱讀過的內容。 – I82Much 2011-04-04 20:35:22

+1

+1從未聽說過/使用過這種方法,#loveit – xandercoded 2011-04-04 20:35:40

+0

我剛開始使用它,很驚訝於很少有人還不知道/使用這種方法。 – ashurexm 2011-04-04 20:38:28

1

通常情況下,我們會製作一個隱藏字段,名爲「多汁吸引人」,名字如「名字」。

然後在代碼隱藏我們運行類似:

if FirstName.text <> "" Then 

    <insert your "what I want to happen" code. maybe a popup saying "oops an error has been made" or just not submit the form. maybe redirect to a fake error page. like 

    response.redirect("thisisabot.aspx") 

endif 
+1

也許**不做任何事情**。向垃圾郵件發送者提供錯誤信息是一個糟糕的主意:)讓他們認爲這一切都是正確的! ;) – 2013-01-28 10:51:11

0

沒有必要渲染提交按鈕經常將數據從遠程服務器發送,而不是從頁面本身填寫。驗證碼很可怕,有時候很不清楚,我不明白它說了什麼。我一次使用三種方法來阻止機器人。

  1. 比較表單源IP地址和目標IP地址,如果它們不匹配,則不會進行進一步的處理。
  2. CSS隱藏的字段留空,如果填充,它是一個bot,並被忽略。
  3. 另一個在提交表單時通過JavaScript接收預定值的字段。沒有匹配,沒有進一步的處理。

我還記錄了IP地址到數據庫表的嘗試。這些嘗試失敗了一次,兩次或全部測試。

但是,阻止血汗工廠垃圾郵件發送者完全是另一回事。血汗工廠垃圾郵件發送者是被廉價僱用來手動發送垃圾郵件的人。如果您的網站較大,則可能需要使用處理此類垃圾郵件的服務。一些服務也處理濫用的語言。

相關問題