Hide QueryString MVC3 -ASP.NET

本文关键字:NET -ASP MVC3 QueryString Hide | 更新日期: 2023-09-27 17:59:58

我将Vaus存储在RouteData中,如下所示。

new RouteValueDictionary(new { Controller = "Absence", Action = "AmendAbsence", Id = PersonGuidSelected })

我正在使用以下RouteData.Values["id"].ToString() 从RouteData中获取值

这是可以的,但是这些值在URL中是可见的。我不希望在URL中看到这些值。

我怎么能那样做?

以前有人这样做过吗?

Hide QueryString MVC3 -ASP.NET

您可以将其加密存储在URL中只需加密每个Querystring参数。这样做的优点是,您的用户可以使用参数为页面添加书签(除非这不是您想要的;然后您可以将过期时间添加到加密值中,这样您就可以检测URL是否已经过期)。

选项#2是将您的值存储在客户端上的加密非持久cookie中,如果您需要将它们从页面视图持久化到页面视图。您希望它们被加密,这样就不能从浏览器的内存中读取,并且希望它们是非持久性的,这样就不会保存到文件中。用户无法为URL添加书签。

选项#3的可扩展性最低,即将其存储在ASP.NET服务器或state服务器上的会话状态中。任何一个服务器都不应该受到攻击,因此没有必要在此处使用加密。但是,如果你的服务器很慢和/或有很多访客,这可能会减慢机器的速度。同样,访问者不能为URL添加书签,因为参数没有存储在那里。

选项#4是在URL中存储哈希密钥,并将与该哈希密钥相关的实际数据存储在内存或数据库中。同样,你必须看看这在你的情况下是否可行。用户可能会也可能无法为URL添加书签,这是你的选择——如果可以,那么你需要永久记录(哈希键、值)对。

如果这是敏感数据,有两种可能性:

  • 将其存储在服务器上的会话中
  • 将其存储在客户端的加密cookie中。如果使用表单身份验证,则可以使用FormsAuthentication票证的userData部分。通过这种方式,它将随每个请求一起发送。但如果它真的是非常敏感的数据,将其存储在服务器上会更好。然后使用经过身份验证的用户名来检索存储在服务器上的数据

如果它不敏感,您可以使用POST而不是GET,这样典型的用户就不会在URL中看到它。