簡體   English   中英

如何防止用戶從本地保存的Html登錄頁面訪問Web應用程序?

[英]How to prevent users from accessing a web application from a locally saved Html login page?

我有一個很多非技術用戶使用的Web應用程序。 我發現其中一些用戶正在將應用程序的登錄頁面保存到他們的桌面(這也保存了相關的CSS和JS文件)。 然后,要開始使用該應用程序,他們雙擊該桌面圖標,該圖標使用file:// protocol顯示本地副本。

這可能會導致以后出現問題,例如,如果我更改登錄表單或發布的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。

有沒有其他人有這個問題,並提出他們想分享的聰明的解決方案?

謝謝

更新:

最后,我決定通過在登錄頁面請求時設置帶有nonce值的cookie,並在表單中存儲與隱藏字段相同的值。 然后,在表單提交處理程序中,檢查兩者是否相同,如果沒有則顯示錯誤消息。 可以將nonce存儲在會話中而不是cookie中,但我不想創建不必要的會話。

如果用戶已在本地保存了登錄頁面,則與cookie相比,保存的表單中的nonce值可能會有不同(如果他們有cookie的話)。

通常,人們不會在登錄表單中添加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

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

除此之外,可能有一種方法可以創建URL的快捷方式,也許是在登錄期間?

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

編輯:

實際上,之前已經提出了一個模糊相似的問題並得到了一個很好的解釋,為什么referrer不是一個理想的解決方案,並提供了另一種解決方案: 如何檢查來自同一服務器或不同服務器的請求?

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

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

為什么,不是你,而不是警報,重定向到你的頁面?

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

或者您也可以使用window.location.reload();強制重新加載window.location.reload();

您可以將用戶重定向到具有登錄表單的真實頁面,而不是顯示消息,或顯示幫助框,以解釋用戶應以這種方式保存頁面。

您可以設置一個在表單中設置為隱藏變量的會話變量。 如果不存在,則重定向到您的登錄表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM