2010-05-08 67 views
2

我正在構建一種註冊表的應用程序。想想字典:你查找一個單詞,如果找到該單詞,它會返回一些內容。現在,該註冊管理機構將存儲有關公司的寶貴信息,並且有些人可能會想要獲得完整的列表。我的應用程序使用回覆到WS的EJB 3.0。防止機器人多次查詢我的數據庫

所以我想每個IP地址每天最多允許10個查詢。將IP地址和計數器存儲在桌面上,每晚將由腳本清空。

這樣做是一個好主意嗎?如果是的話,我怎樣才能在EJB端獲得IP地址? 有沒有更好的方法來防止某些東西從我的數據庫中獲取所有數據? 雖然關於CAPTCHA,但我認爲這對用戶來說是一種痛苦,有時甚至對於真正的人來說也很難閱讀。

希望這一切都清楚,因爲我不是英語......

感謝 阿蘭

+0

您的web服務或網站是否需要驗證?任何人都可以註冊並創建一個帳戶,還是需要某種類型的批准?如果你解決了訪問問題,你可以防止機器人。如果你的網站是開放的,那麼你只能讓事情變得困難,而不是不可能。 – 2010-05-08 03:03:07

+0

感謝您的關注。是的,我的網站是公開的,它需要保持公開。但也可以創建一個帳戶來獲得更多的服務。要創建一個帳戶,系統會進行電子郵件驗證(發送電子郵件到提供的地址以驗證它是一個好的電子郵件地址)。而且我還擁有關於該賬戶創建的CAPTCHA。談到CAPTCHA,這是我的唯一真正安全的解決方案,因爲我的網站需要保持公開?或者機器人現在已經足夠閱讀CAPTCHA了? – Alain 2010-05-08 03:08:36

回答

1

我說每一天IP查詢10的極限不是很好。考慮到許多人可能共享相同的公共IP。

雖然它不是100%準確的,但您可以分析在短時間內是否有異常數量的請求來自同一個IP。如果您的鬧鐘響起,您會顯示一個驗證碼。

+0

+1共享IP地址。更何況有人可能只是爲了獲得大量的IP地址而付費,或者使用機器人,這使得停止「收集」幾乎是不可能的。更好地將應用限制在受信任的人員或限制他們可以看到的位置。 – 2010-05-08 02:11:47

1

另一種方法是將獨特的基於請求的令牌放入存儲在會話範圍中的表單的隱藏字段中,然後比較表單的提交情況。這將過濾出不會維護會話的殭屍程序,並且已經非常多。

更進一步,您可以添加一個時間戳到基於請求的標記,然後檢查表單是否在合理的時間內提交,例如, 5秒(至少是正常人可以輸入並提交表格的最快時間)。這將過濾掉通常會立即填寫並在亞秒內提交表單的另一個漫遊器。這樣做的另一個優點是,如果發現很多智能機器人,那麼它就會被迫輕鬆解決很多後續請求。

我至少不會依賴IP地址。它帶有太多的外部干擾因素。

+0

但他想阻止_targeted_攻擊,在這種情況下,「收集器」可能會繞過這些對策。 – 2010-05-08 02:25:47

+0

@Longpoke:弄清楚這一點並不容易:)那麼你知道更好的方法嗎? – BalusC 2010-05-08 02:26:42

+0

非常感謝您的回答。但我只是想確保我理解正確。 在我的表單上,我在表單上放置了一個隱藏字段,其中包含時間戳,並且我在該會話中存儲了相同的值。提交表單時,我會將提交的隱藏字段的值與會話中的值進行比較。如果這個值小於5或10秒,那麼我可以顯示一個CAPTCHA來停止機器人。 您能否確認我理解正確的解決方案? 謝謝 – Alain 2010-05-08 03:00:25