2012-10-09 55 views
4

我正在運行flask/memcached,並且正在尋找一種精益/高效的方法,以防止自動化腳本在請求和/或提交新帖子時過快。最簡單的方法來防止腳本濫用網絡應用程序?

我曾想過在會話cookie中包含一個'last_action'時間並檢查每個請求,但無論我設置了多少時間,都可以將腳本設置爲延遲那麼久。

我也想過抓住IP,如果有太多的請求是在x時間內完成的,再否認這麼長時間,但這需要像redis這樣的有效運行,這是我想要避免的不得不支付。

我更喜歡基於cookie的解決方案,除非像redis這樣的東西可以證明它是值得的。

處理這些情況的「行業標準」是什麼?哪些方法具有最少的成本/性能折衷?

回答

4

由於惡意腳本可能會悄悄丟棄您的cookie,因此無法通過cookie實現此目的。由於您必須支持用戶首次訪問的情況(意思是沒有設置任何Cookie),因此僅通過考慮存儲在客戶端上的狀態,無法區分真正的新用戶和惡意腳本。

您需要跟蹤服務器端的用戶以實現您的目標。這可以像基於IP的過濾器一樣簡單,以防止相同IP的快速發佈。

2

您應該坐下來確定您的應用場景中您的「核心」問題究竟是什麼,以及您的可能用戶是誰。這將有助於您指導正確的解決方案。

根據我的經驗,也有很多在這個問題不同的問題和解決方案 - 並沒有一個是一個「一刀切」

  • 如果您有匿名用戶的一個問題,你可以嘗試儘可能多地遷移「帳戶牆」背後的功能。
  • 如果你不能使用帳戶牆,那麼你會更好的基於一些基於IP 的跟蹤,以及一些其他頭/ JavaScript的東西。單憑IP,由於企業代理,家庭路由器等原因,可能會造成災難。您將面臨太多誤報。如果你添加瀏覽器信息,不情願的用戶仍然可以僞裝它 - 但你會懲罰較少的真實用戶。
  • 您可能希望帳戶牆僅用作強制執行Cookie的一種方式,或者可能會插入擁有可獲得特權的網站標識的想法
  • 您可能需要一個可映射到另一個可信任帳戶的帳戶網站的帳戶。例如,我通常信任與Facebook綁定的第三方帳戶 - 在處理假帳戶方面相當不錯。我不相信第三方帳戶綁定對Twitter - 主要是垃圾郵件。
  • 你可能只需要網站「註冊」需要解決驗證碼,或其他一些輕微不便,以消除最不受歡迎的訪問。如果對不良行爲的回報夠高,你就不會解決任何問題。

我可以整天談論這件事。從我的角度來看,您必須首先解決業務邏輯和ux概念 - 然後技術解決方案要容易得多。

0

我以前使用過的一個非常簡單的方法是在使用CSS隱藏的註冊表單中有一個額外的輸入(即顯示:無)。大多數形式的機器人將填補這個領域,而人類不會(因爲它不可見)。在您的服務器端代碼中,您可以拒絕任何輸入填充的POST。

相關問題