2008-09-15 68 views
24

我有一些網站需要登錄並顯示敏感信息。有沒有辦法讓一個人一旦註銷但是點擊「後退」按鈕就不會呈現頁面?

此人進入頁面,提示登錄,然後查看信息。

該人員退出該網站,並被重定向回登錄頁面。

此人可以擊中「返回」並返回到包含敏感信息的頁面。由於瀏覽器只是將其視爲呈現的HTML,所以它向他們展示沒有問題。

當人從註銷的屏幕上點擊「後退」按鈕時,是否有辦法阻止顯示信息?我並不是試圖禁用後退按鈕本身,我只是試圖讓敏感信息不再被顯示,因爲該人沒有登錄到網站了。

爲了說明方便,上面的站點/場景位於帶有窗體身份驗證的ASP.NET中(因此,當用戶轉到第一個頁面時,他們將被重定向到登錄頁面 - 在有區別的情況下)。

回答

13

簡而言之,它不能安全地完成。

但是,有很多技巧可以實現,使用戶很難反擊並獲取敏感數據。

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(Now.AddSeconds(-1)); 
Response.Cache.SetNoStore(); 
Response.AppendHeader("Pragma", "no-cache"); 

這將在客戶端禁用緩存,然而這並非所有瀏覽器都支持

如果您在使用AJAX那麼敏感數據的選項可以使用從客戶端代碼更新的UpdatePanel來獲取的,因此打回來時,除非客戶端在仍處於登錄狀態也不會被顯示出來。

3

aspdev.org

添加以下行的Page_Load事件處理程序的頂部和ASP.NET頁面將不會在用戶的瀏覽器緩存:

Response.Cache.SetCacheability(HttpCacheability.NoCache) 

設置該屬性可確保當用戶點擊後退按鈕,內容將消失,如果他按下「刷新」,他將被重定向到登錄頁面。

0

你正在尋找一個no-cache指令:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 

如果你有一個母版頁設計去,這可能是忙裏忙外的一點點,但我相信你可以把這個指令在一個頁面上,而不會影響你的網站的其餘部分(假設這是你想要的)。

如果你已經有了這個指令集,瀏覽器會忠實地回到服務器尋找一個全新的頁面副本,這會讓你的服務器看到用戶沒有通過身份驗證,並且讓他碰到登錄頁面。

0

退出操作是否爲POST。然後瀏覽器會提示「您確定要重新發布表單嗎?」而不是顯示該頁面。

0

我不知道該怎麼做,在ASP.NET但在PHP我會做這樣的事情:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 

迫使瀏覽器重新檢查該項目,所以您的驗證檢查應被觸發,拒絕用戶訪問。

0

正確的答案涉及到在響應中設置HTTP Cache-Control標頭。如果你想確保他們永不緩存輸出,你可以做Cache-Control:no-cache。這通常與無商店協調使用。

其他選項,如果你想有限的緩存,包括設置過期時間和必須重新驗證,但這些可能會導致一個緩存頁面再次顯示。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

0

這是一個有點拉傷,但如果你有一個Java小程序或嵌入和驗證的Flash應用程序是通過做,你可以把它使他們不得不來認證,ERM ,每次他們想要查看信息時,都需要與服務器進行'實時'。

使用這個你也可以加密任何信息。

總有這種可能性,有人可以保存頁面上的敏感信息,沒有緩存不會解決這種情況(但總是可以獲取Flash或Java應用程序的屏幕截圖)。

0

出於完整性:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 
1

DannySmurf,<元>當涉及到控制緩存,和附註特別更是如此元素是極不可靠。 Reference

1

dannyp等人,no-cache不會阻止緩存存儲敏感資源。它僅僅意味着一個緩存不能爲它存儲的資源提供服務,而不必首先重新驗證它。如果您希望防止敏感資源被緩存,則需要使用no-store指令。

0

那麼,在一家以世界上最安全高效的家庭銀行軟件之一而聞名的巴西主要銀行公司(Banco do Brasil),他們只是簡單地將history.go(1)放在每一頁中。 ,如果你點擊後退按鈕,你將被退回。簡單。

+0

我認爲有可能使用調試器或類似的東西來做一種Javascript hack跳過這個命令。 – 2008-09-24 07:48:50

+0

是的,但如果用戶使用小後退箭頭返回3步會發生什麼?幾乎沒有辦法做事。 – LordOfThePigs 2009-04-20 09:58:24

9

Cache and history are independent一個不應該互相影響。

唯一的例外made for banks是HTTPS和Cache-Control: must-revalidate組合在歷史導航時強制刷新。

在純HTTP中,除了利用瀏覽器錯誤之外,沒有辦法做到這一點。

你可以使用JavaScript來檢查document.cookie並在設置「殺手」cookie時重定向,但我想如果瀏覽器沒有按預期設置/清除cookie,這可能會嚴重錯誤。

0

您可以將敏感網頁作爲HTTP POST返回,然後在大多數情況下,瀏覽器會向您發送詢問您是否要重新提交數據的消息。 (不幸的是,我找不到這種行爲的典型來源。)

0

我剛剛考慮了銀行業務的例子。

我的銀行的頁面有這個在它:

<meta http-equiv="expires" content="0" /> 

這應該是關於這個我想。

1

您可以通過javascript函數執行快速服務器檢查(ajax),如果用戶未登錄,則會擦除當前頁面並用消息替換它。這顯然對於JavaScript關閉的用戶而言很脆弱,但這種情況非常罕見。好處是,這是瀏覽器和服務器技術(asp/php等)不可知論的。

相關問題