2014-06-16 93 views
1

我在我的註冊表單中添加了一個輸入字段,通過正則表達式驗證值以避免垃圾郵件自動註冊。我不知道它是否會工作,或者垃圾郵件機器人會通過它。正則表達式驗證以防止垃圾郵件註冊?

這裏是我的代碼:

 <label>Type "Word" in the field*</label> 
     <input pattern="(Word|word)" type="text" name="antispamfield" 
     id="antispamfield" required/> 

現在的用戶將不得不爲了完成註冊,進入「文字」。但是,垃圾郵件是否會通過驗證?有沒有人有更好的主意,而不是使用正則表達式或JavaScript?

+3

鑑於你已經在輸入標籤本身提供了問題的答案,它不會有太大的限制... –

+0

是的,但這是萬一我的網站是專門針對目標。對? @MarcB –

+0

您需要使用正確的驗證碼,例如Google reCaptcha才能避免垃圾郵件。儘管你需要一些代碼。你的方法可能會阻止一些垃圾郵件通過。 – HaukurHaf

回答

2

垃圾郵件發送者是否可以通過驗證?

是的。容易。

如果瀏覽器可以讀取「祕密詞」(顯然它可以),那麼垃圾郵件發送者可以讀取它:在他的curl(或等效的)輸出中明顯存在。

因此,他可以調整自己的腳本以讀取<label>Type "Word"</label>字段中的單詞,並自動將其輸入到antispamfield文本輸入字段中。

其他想法

有抵禦垃圾郵件的形式很多方法。沒有一個是完美的。其中一些是:

  1. 令牌在提交之前保存在會話中。如果您在沒有正確標記的情況下獲得提交,那麼這比可疑更重要。
  2. 控制每個IP地址每個時間段的評論數量。
  3. 要求用戶在他或她可以發表評論之前進行登錄。
  4. 驗證碼,比如驗證碼
  5. Are you Human?挑戰

有些需要數據庫。

+0

感謝您提供這些信息,您是否有鏈接解釋瞭如何爲此目的生成令牌? –

+0

@MinaIsaac從內存中,我認爲Chris Schiffert在他的PHP安全手冊中介紹了它。基本上,您將令牌放在窗體上作爲隱藏的輸入字段,稍後在POST數據中檢查它,並與會話中存儲的值進行比較。至於產生令牌的公式......這並不重要,即使是一個隨機的int也會這樣做,因爲如果這個人繼續嘗試,你的防洪將會抓住它。這就是說,如果你搜索「生成唯一的令牌形式」,你可能會得到一些其他的想法。 :) – zx81

1

您可以在驗證中使用CAPTCHA(http://www.captcha.net/)。我認爲這比你的強大得多。此外,請注意:您可能希望在您的模式中包含「WORD」,因爲有些人會輸入所有上限以進行驗證。

+0

好點,我也要加WORD,謝謝。我不想使用任何驗證碼 –

-1

我會用一些文字問題,很難被大多數機器人猜到,比如「誰是第二位美國總統?」並在發送表單時通過服務器腳本檢查答案。