2016-03-03 58 views
0

首先,讓我解釋一個反垃圾郵件的概念:兩個月前,我在我父親公司的網站上遇到了一個問題。它有一個聯繫表格,但俄羅斯的機器人經常發送垃圾郵件服務器的郵箱(每天三到五條信息)。我改進了驗證碼(更復雜的字體,不同的背景等),但這似乎不是一個永久的解決方案。機器人比我想象的要聰明一些。我開始閱讀不同的反垃圾郵件概念,並找到了「honeypot method」。它工作了一段時間,但機器人在實施後的第一週就瞭解了該領域的名稱。現在,每天早上我必須打開PHP文件併爲該隱藏字段創建一個新名稱。蜜罐反垃圾郵件技術。如何爲每個網站加載的隱藏字段隨機生成一個名稱?

好的。對於這個問題。我需要爲該字段生成隨機名稱,但我需要一個如何去做的概念。現在我正在使用一個PHP腳本來執行以下操作:

1:刪除MySQL數據庫中所有記錄的會話,大於10分鐘。

2:檢查是否爲當前用戶設置了會話。 3:如果會話設置的時間少於10分鐘,則只更新會話,將當前輸出time()寫入數據庫。

4:如果不是 - 開始一個新的會話,並在MySQL中記錄它是session_id()。我在我的MySQL表中有4列:id(PRIMARY KEY,記錄的ID); sess_id(我把輸出session_id()並用它來管理用戶會話); session_started(包含time()的輸出); tf_name(包含一個隨機生成的字符串,稍後應該用作蜜罐字段的名稱屬性)。

一般來說,這個概念是有效的。但是它限制了用戶在頁面加載後不超過10分鐘發送消息。我需要消除時間因素。

在我看來,其中一種解決方案是在網站加載時生成一個新的PHP會話,並在用戶離開網站(關閉瀏覽器,單擊外部鏈接等)時生成一個新的PHP會話。由於我不想使用JavaScript(因此,不能使用onunload事件),事實上,onunload事件將觸發,無論您單擊外部鏈接還是內部鏈接(或者您提交一個聯繫表單,它將爲蜜罐字段生成一個新名稱)。

+0

你不能只是增加至極限 - 說 - 一個小時?應該很少有人想在他上次加載任何頁面超過一個小時後向您發送消息... – Kempeth

+0

您是否嘗試過使用CAPTCHA?這可能是阻止殭屍垃圾郵件最簡單的解決方案。如果這仍然是簡單的。您可以考慮爲每個表單創建一個令牌(祕密標識)。很好的解釋,我在這裏學到了很多:https://css-tricks.com/serious-form-security/ – izk

+0

使用reCAPTCHA,它很容易實現https://github.com/google/recaptcha – cmorrissey

回答

1

簽出稱爲csrf或跨站請求僞造的概念。我認爲這將是一個更實際的解決方案,而不是我認爲的解決方案。

編號:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

經驗:https://github.com/smiegles/PHP-csrf-security-classes

我你已經使用了驗證碼,但看到機器人哪裏能繞過它;使用更好的驗證碼:)。我個人有好運的兩個驗證碼是那些需要簡單的數學答案(3+4)I am not a robot複選框。

編號:https://www.google.com/recaptcha/intro/index.html

編號:https://github.com/nettraction/Math_Captcha

相關問題