2010-01-06 203 views
0

這個問題是類似於我問here。但它的相關因爲我想達到同樣的效果。我希望用戶只能通過主頁面訪問網站上的其他頁面。第一頁包含用於導航的框架,然後是用於導航到的頁面內容的框架。我希望它被設置爲使他們可以訪問內容頁面的唯一方式是使用此主頁面。因此,如果主頁是http://intranet/index.html,那麼他們無法使用index.html中提供的鏈接來訪問http://intranet/other_page.html。這是可能的,如果是的話,最好的技術是什麼?我使用Apache來服務該網站,我有PHP和JavaScript可用。限制訪問頁面只允許從某個頁面

+0

你能解釋一下你爲什麼要這樣做嗎? – 2010-01-06 21:18:04

+0

@Jordan:看看我對Andrzej Doyle的回答的回答 – 2010-01-06 21:33:17

回答

1

檢查Referer請求標頭 - 它會阻止臨時用戶使用瀏覽器。它可以被欺騙 - 你不會欺騙一個堅定的攻擊者。

儘管可能出現假陽性。有時Referer沒有設置。

+0

我假設你需要在每個加載到該框架的頁面內執行此操作,並且可以使用php來完成此操作?並感謝你最終沒有對我進行檢查輸入和所有這些。所有其他的答案都沒有考慮到這個事實,我說輸入已經過了消毒處理,我只是試圖讓一般的joe主要用戶不會玩弄它。他們將無法訪問他們提及的任何工具! – 2010-01-06 21:11:47

+0

是的,爲每個頁面。我建議一個PHP包含來完成這項工作。標頭的值爲 $ _SERVER ['HTTP_REFERER'] – 2010-01-06 21:51:06

+0

謝謝。你的第二個評論是我正在尋找的! – 2010-01-07 04:57:11

4

簡短的回答是 - 不,不可能,嚴格地講

長的回答是,你可能會想出一個合理的近似值這個,但你確實需要知道這個限制。

從根本上講,HTTP是無狀態的。無論發生什麼具體操作,您的網絡服務器都會看到一個/other_page.html的單個請求,並且需要決定是否提供服務。爲了有某種合理的限制,第一步就是你會有有一些維護服務器端狀態的方法。如果沒有這個,你無法將之前的請求與other_page.html的任何傳入請求進行匹配。好消息是PHP確實對服務器端會話有本地支持。 (如果沒有服務器端會話,您可以嘗試使用客戶端會話cookie來實現此目的,或者檢查引用標頭,但這對於客戶端來說是虛假的,因爲這些只是它們向您發送的字符串,並且您接受他們的話)。

現在,您需要使用此會話來跟蹤用戶是否已經到達第一頁,然後才能轉到其他頁面 - 您可以在請求第一頁時在會話中設置變量,並在每個請求/other_page.html,確保此變量在服務之前在會話中設置。這至少給你一個合理的想法,即他們已經訪問了本屆會議的第一頁。

然而,你絕對沒有辦法知道在瀏覽器中點擊了哪個鏈接來請求一個特定的URL - 甚至根本不用瀏覽器。你的服務器看到的是一個特定的資源和一些頭文件的請求。一種可能的模擬方法是在/index.html服務時生成一個隨機字符串,並將其作爲查詢參數添加到該頁面上的鏈接。然後將其存儲在會話中,並在請求other_page時檢查請求是否包含具有相同隨機字符串的查詢參數。


但在這一點上它的時間退後一步說 - 爲什麼你要做到這一點?爲什麼會這樣做,我完全可以想到沒有什麼好的理由。 這不是一個合適的安全措施 - 你需要正確地做安全,如果這是你的動機,你應該要求它。這不是一個強制執行特定工作流程的好方法 - 不管這是一個好主意還是有爭議的,但是不要考慮如何強制人們在頁面B之前前往頁面A,請仔細想想究竟是爲什麼它是你是否需要他們這樣做,你的限制因素是什麼,以及什麼是實現它們的最不具侵略性的方式。

別忘了 - http://intranet/other_page.html是一種統一資源定位符,與您在該頁面上提供的內容相對應。如果有人在某一天訪問該地址並看到有用的資源,爲什麼他們回去時不能再看到它?我強烈建議你考慮一下爲什麼你想故意阻礙用戶的體驗,並且違背互聯網通常與你的網站一起工作的方式。

+0

我試圖這樣做的原因是因爲他們希望Intranet的設計使用框架,以便最終用戶只能看到地址欄中的主頁(/index.html),而不管他們在哪個頁面上。但我不希望用戶能夠「查看頁面源代碼」查看他們想要的內容在「/other_page.html」,只需在地址欄 – 2010-01-06 21:28:49

+0

中輸入該內容,並且無法回到該地址欄另一天。這是隻有經過域認證的用戶可訪問的內部網。用戶只能使用地址欄篡改傳遞給頁面的數據,所以我相信爲了簡單起見,獲取此功能將阻止人們使用這些有限工具在站點周圍窺探 – 2010-01-06 21:31:36

+1

如果您只關心是否希望他們請將URL看作/index.html最簡單的方法是使用apache的mod_rewrite – eCaroth 2010-01-06 21:56:48