我們目前在我們的ASP.NET網站上提供了一個冗長的表單,它使用面向公衆的外觀WCF服務通過SSL將信息提交到我們的網絡,通過一些其他門面服務等。WCF/ASP.NET - 防止濫用,如DOS
我們遇到了一些與服務鏈宕機有關的問題,並且由於這個原因,一些用戶非常沮喪,他們完成了冗長的表單,只是在事實之後才發現服務沒有起來。因此,我們正在實施一種形式的ping功能,在表單啓動之前對服務執行ping操作,以確保服務已啓動。
如果在形式網頁的OnLoad
期間簡單地調用Ping()
方法,則可能會通過例如腳本持續對頁面發出HTTP GET請求的DOS攻擊。
我的問題是 - 從概念層面上,確保人與頁面互動並保持可用性的最佳方式是什麼?例如,調用Ping()
之前的CAPTCHA被調用並且表單被啓動的方式太具侵入性,即使它可以有效地確保表單被正確使用。另一方面,僅僅允許Ping()
發射OnLoad
對於攻擊來說太冒險了。
我考慮過的一個選項是讓用戶可以使用一個按鈕,以便他們驗證服務的可用性並一次性啓用該表單。這至少是兩者之間的平衡。我要求您就如何最好地平衡這種方法提出意見。任何基於asp.net,c#或javascript/ajax的答案都可以。
最後 - 我也知道這種檢查服務可用性的方法存在缺陷,因爲不能保證服務在填寫表單時可用 - 但是已經決定使用這種方法,所以請保持你的答案的重點。
感謝您的幫助和提前輸入!
更新1:
在回答下面喬希的答案 - 我要澄清,提交的表單數據是敏感的,不能在服務器上本地供以後提交如果服務失敗緩存或存儲。這就是爲什麼讓用戶搶先註冊非常重要。我們在服務方面遇到的問題不是間歇性的,因此如果Ping()
回來,那麼用戶幾分鐘後就不會遇到提交表單的問題。
更新2:
- 的
Ping()
方法是目前服務器端C#方法,而不是的JavaScript。 - 面向公衆的WCF服務是IP限制,只允許從公共網絡服務器
這個,但擴展它;請確保使用AJAX,以便用戶不會丟失任何數據,並且如果他們有Html5可用,請提供將其保存在本地,或者可能將其發送到備份服務器或SOMETHING。 – Kris 2011-01-20 19:55:21
感謝喬希的投入。表單已經通過一些FaultExceptions處理了任何問題。他們已經得到一個用戶友好的錯誤消息。如果服務不可用,他們不希望首先填寫表單... – 2011-01-20 19:57:25