2010-09-01 177 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为空[请求直接来自地址栏],请采取适当的措施。