2012-01-31 48 views
9

我有一個很多非技術用戶使用的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

回答

1

也許Cookie?如果網站正在運行file:\\,請求中可能沒有任何Cookie。 (當然,現在您應該在登錄頁面上添加一些cookie(會話數據)。

另外,請閱讀CSRF http://en.wikipedia.org/wiki/Cross-site_request_forgery以及防止方法。

+1

確實,保存的副本上不會有任何Cookie。因此,我可以在登錄表單上設置Cookie,並在菜單頁面上檢查登錄後是否存在,好! – 2012-01-31 14:07:45

+0

您是否建議使用從登錄頁面提交到登錄處理程序的時間依賴CSRF標記?我想,就像CSRF保護一樣,我試圖檢測不是來自我的應用程序的請求,所以這可能也會起作用。我會嘗試你的建議並回報。 – 2012-01-31 14:12:01

1

您可能可以檢查服務器端的http referrer並警告用戶不是來自您的託管登錄表單。

編輯:

其實,隱約類似的問題已經被問過,並得到了很好的解釋爲什麼引用是不是一個理想的解決方案,也提供了一種替代解決方案:How to check if a request if coming from the same server or different server?

+0

我曾試過這個,它看起來像是理想的解決方案,但似乎IE和Chrome(我測試過的)在從file://去http:// – 2012-01-31 13:22:42

+1

時不會發送引用者除非用戶修改了瀏覽器的默認行爲,否則可以安全地假設帶有空引用鏈接的請求不是來自您的登錄表單的?如果您擔心惱人的用戶,您可以提醒他們一次,並在他們確認他們瞭解其含義後再也不會再提醒他們。 – Till 2012-01-31 13:36:11

+0

好主意,檢查引用的缺失可能會起作用(但也會導致一些誤報,例如用戶在登錄時在URL中鍵入),不幸的是,我遇到了過去在引用過程中使用引用標題的問題應用程序 - 許多用戶都置身於公司防火牆之後,無論如何,這些防火牆都會將引用標頭剝離爲安全措施。如果我不明白這一點,我會接受你的回答 – 2012-01-31 13:56:04

0

相反的消息,你可能會重定向您的用戶轉到具有登錄表單的實際頁面,或者顯示將解釋用戶應該以這種方式保存頁面的幫助框。

2

我認爲你最好的選擇是教育用戶使用書籤而不是保存物理文件。

除此之外,可能有一種方法可以創建一個到您的URL的快捷方式,而不是在登錄時?

+0

這是一個好主意,我看過有'添加書籤'鏈接的站點(可能使用javascript)。我可能會實現這一點,但此時我需要警告已經完成此操作的現有用戶。 – 2012-01-31 13:27:57

1

爲什麼不,而不是警報,把重定向到您的網頁?

window.location = 'http://www.yourdomain.com' 

或者你也可以強制與window.location.reload();

+0

這個問題表明HTML頁面已被客戶端保存,因此無法修改。我希望能夠通過本地保存的副本來檢測哪些用戶正在訪問視頻。此外,重新加載文件://頁面將重新加載本地副本 – 2012-12-17 14:24:35

0

重載你可以設置被設定爲形式的隱藏變量會話變量。如果那不在那裏,您重定向到您的登錄表單。

相關問題