我有一個很多非技術用戶使用的web應用程序。我發現其中一些用戶正在將應用程序的登錄頁面保存到他們的桌面(這也保存了關聯的CSS和JS文件)。然後,要開始使用該應用程序,他們雙擊該桌面圖標,使用file://協議顯示本地副本。如何防止用戶從本地保存的Html登錄頁面訪問Web應用程序?
這可能會在稍後導致問題,例如,如果我更改了登錄表單,或者發佈到的URL,等等。另外,某些javascript實用程序,例如PIE.htc不能使用file://協議。
顯然,他們應該做的是保存一個瀏覽器書籤/收藏夾,我正在尋找一種方式來檢測並警告這些用戶而不會混淆其餘的。我一直在使用JavaScript來提醒這些用戶:
if (top.location.protocol == 'file:') {
alert('This application is not designed to be accessed from a desktop copy...')
}
但這隻會提醒那些保存在桌面的副本,因爲我已經添加這段JavaScript的用戶。
有沒有其他人有這個問題,並想出他們想分享的聰明的解決方案?
感謝
更新:
在最後,我決定通過設置一個cookie與在登錄頁面請求隨機數值,並存儲相同的值作爲隱藏字段的形式做到這一點。然後,在表單提交處理程序中,檢查兩者是否相同,如果沒有,則顯示錯誤消息。可以將會話存儲在會話中而不是cookie中,但我不想創建不必要的會話。
如果用戶在本地保存了登錄頁面,那麼與cookie相比(如果他們有cookie的話),它們在保存的表單中可能具有不同的nonce值。
通常情況下,用戶不會向登錄表單添加CSRF保護(這就是這樣),但它滿足了我的要求。我在The Register的http://www.theregister.co.uk/2009/10/02/google_web_attack_protection/上閱讀了這項技術,Google爲其登錄表單實施了類似的保護措施,以防止僞造登錄請求http://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests。
確實,保存的副本上不會有任何Cookie。因此,我可以在登錄表單上設置Cookie,並在菜單頁面上檢查登錄後是否存在,好! – 2012-01-31 14:07:45
您是否建議使用從登錄頁面提交到登錄處理程序的時間依賴CSRF標記?我想,就像CSRF保護一樣,我試圖檢測不是來自我的應用程序的請求,所以這可能也會起作用。我會嘗試你的建議並回報。 – 2012-01-31 14:12:01