2010-09-01 114 views
0

實際上我只想顯示我的站點的主要地址,如「http://localhost/website/」,並且希望保留這個地址用於我的所有視圖(安全目的,以便登錄後無人可以通過地址欄導航而不是對於那些人認證的人應該只應該從菜單導航)我將從控制器調用我不想顯示我的控制器名稱,也不在任何地方甚至在狀態欄和屬性查詢字符串的頁面。在asp.net中隱藏url MVC

+10

所以你真的很討厭網絡,對吧?你的網址有什麼特別之處?您使用授權過濾器對所有受保護的URL進行身份驗證,對吧?這就是你需要的。 – JasonTrue 2010-09-01 05:24:40

+3

這聽起來很有趣,但是,請注意,將隱藏的URL作爲安全功能的想法是一廂情願的想法。無論您的瀏覽器是否顯示地址欄,HTTP請求都是HTTP請求。即使普通用戶沒有,攻擊者也會知道發生了什麼。 – kbrimington 2010-09-01 05:34:15

+4

隱藏網址不利於安全。您需要在網站的相關區域實際實施認證/授權。恕我直言,你要求的是相當荒謬的。 – 2010-09-01 05:34:23

回答

5

這裏有一種折磨的方式,你可能會做你所要求的,但我可以向你保證它不會給你你想要的。具體而言,它不會保護您不受任何攻擊者的攻擊:

  1. 要求除/ GET網站的第一個GET請求之外的所有請求都是/ POST後的所有請求。所有請求都需要包含一個隱藏的表單元素,爲您的應用程序提供等效的信息。這包括應用程序內部的所有超鏈接。那不會很有趣。
  2. 您需要使用IRouteHandler的自定義實現替換默認路由處理程序,以便它檢查HTTP RequestContext以獲取內容的表單數據(或JSON/Xml請求)。響應於GetHttpHandler方法,IRouteHandler需要返回一個合適的處理程序,可能是MvcHandler的包裝器。
  3. 您可能需要小心避免使用大多數內置助手來爲現有控制器生成Url或Ajax請求並編寫您自己的。

因此,在解決你在攻擊這些問題時發現的任何複雜情況之後,你會得到什麼?一個非常不標準的Web應用程序,它利用Asp.Net MVC的很少內置功能,或者HTTP已經在很多年已經建立的習慣用法。如果沒有可見的URL,您將很容易遭受任何重播攻擊;唯一的區別是您的應用程序對您的用戶不太方便,因爲他們將無法使用收藏夾/書籤。

最明智的選擇是使用Restful URL路由方案,或使用默認路由獲得的默認路由方案,然後學習使用授權操作過濾器。

請記住,只是因爲URL或QueryString中沒有顯示,並不意味着它不可用。它只是HTTP請求正文的一部分。在Fiddler之類的幫助下,客戶甚至可以檢查SSL流量到您的服務器。這就是爲什麼你需要一個更完整的解決方案,而不僅僅是使URL不靈活。

您想了解開發Web應用程序的「快樂之路」。如果你努力去解決你正在開發的環境的基本慣例,那麼可能已經有更好的方法來解決你認爲你有的問題了。

1

由於您嘗試的任何技巧都可能會被某個足夠確定的人理解, 爲什麼不使用frame/iframe如果您將其從普通用戶中隱藏起來呢?

0

對此的另一個破解是創建一個帶有承載Web應用程序的iFrame的頁面,以便主框架頁面URL永不改變。

例如。

<html> 
<body> 
<iframe src="http://localhost/myapp/controller"/> 
</body> 
</html> 
-2

在MVC中添加一個訪問過濾器,在訪問過濾器中檢查請求的urlreferrer。如果urlrefferer爲空[請求直接來自地址欄],請採取適當的措施。