在asp.net MVC中隐藏URL

时间:2010-09-01 05:21:57

标签: asp.net asp.net-mvc

实际上我只是想显示我的网站的主要地址,如“http://localhost/website/”,并希望为我的所有视图保留此地址(安全目的,以便登录后没有人可以通过地址栏导航也不是为了那些人是经过身份验证的人应该只应该从菜单中导航我将从控制器调用我不想显示我的控制器名称,也不在任何地方查询字符串,甚至不在状态栏和页面属性。

4 个答案:

答案 0 :(得分:5)

这是一种折磨的方式,你可以做你想要的,但我可以向你保证它不会给你你想要的东西。具体来说,它不会保护你免受任何技术上无能力的攻击者的攻击:

  1. 要求除/第一个GET请求以外的所有请求都是/ post网站的“发布”。所有请求都需要包含一个隐藏的表单元素,该元素为您的应用程序提供等效信息。这包括应用程序内部的所有超链接。这不会很有趣。
  2. 您需要使用IRouteHandler的自定义实现替换默认路由处理程序,以便它检查HTTP RequestContext以获取内容的表单数据(或JSON / Xml请求)。为了响应GetHttpHandler方法,IRouteHandler需要返回一个合适的处理程序,可能是MvcHandler的包装器。
  3. 您可能需要小心避免使用大多数内置帮助程序为现有控制器生成Urls或Ajax请求并编写自己的帮助程序。
  4. 所以,在解决了这些问题后解决你发现的任何并发症后,你会得到什么?一个真正非标准的Web应用程序,它充分利用了Asp.Net MVC的内置功能,或者是多年来在HTTP中已经很好地建立的惯用语。如果没有URL可见,您将容易受到任何重播攻击的攻击;唯一的区别是您的应用程序对用户来说不太方便,因为他们无法使用收藏夹/书签。

    最明智的选择是使用Restful URL Routing方案,或者使用默认路由获得的默认路由方案,然后学习使用授权操作过滤器。

    请记住,仅仅因为某些内容未显示在网址或QueryString中并不意味着它不可用。它只是HTTP请求正文的一部分。在Fiddler之类的帮助下,客户端甚至可以检查服务器的SSL流量。这就是为什么你需要一个更完整的解决方案,而不仅仅是让URL不灵活。

    您想学习开发Web应用程序的“快乐之路”。如果你正在努力解决你正在开发的环境的基本惯例,那么可能已经有了一种更好的方法来解决你认为的问题。

答案 1 :(得分:1)

因为你试过的任何技巧都可能被一个足够坚定的人想出来, 为什么不使用frame / iframe,如果你将它从普通用户那里隐藏起来呢?

答案 2 :(得分:0)

另一个问题是创建一个包含承载Web应用程序的iFrame的页面,这样主框架页面URL就永远不会改变。 e。

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

答案 3 :(得分:-2)

在MVC中添加访问过滤器,在该访问过滤器中检查请求的urlreferrer。如果urlrefferer为null [请求直接来自地址栏],请采取适当的措施。