【问题标题】:How to hide parameters from querystring (url) ASP.NET如何从查询字符串(url)ASP.NET 中隐藏参数
【发布时间】:2019-09-09 17:12:33
【问题描述】:

我试图在我的 Web 应用程序的查询字符串中隐藏参数。 我已经能够通过使用会话来存储临时变量来做到这一点。所以它会像这样工作:

1.点击查看个人资料按钮:

href="@Url.Action("RedirectWithId", "Redirect", new { act = "ProfileView", ctrl = "User", id = member.Id})"

2。调用重定向方法并存储临时数据:

public class RedirectController : Controller
{
    public ActionResult RedirectWithId(string act, string ctrl, int id)
    {
        Session["temp_data"] = id;
        return RedirectToAction(act, ctrl);
    }
}

3。在不带参数的action方法中使用:

public ActionResult ProfileView()
    {
        if (Session["temp_data"] == null)
        {
            return Redirect(Request.UrlReferrer.ToString());
        }

        int id = (int)Session["temp_data"];
        var model = GetUserById(id);

        return View(model);
    }

所以它工作得很好,但是,这种隐藏参数的方法不能处理假设我转到第一个配置文件(id 4),然后转到第二个配置文件(id 8)的情况。如果从第二个配置文件我按下导航器上的后退按钮试图返回到第一个配置文件(id 4),我将被重定向到当前配置文件(id 8),因为 8 是当前值Session["temp_data"].

有没有办法处理这种特殊情况?或者是另一种完全不同的更好的方法来隐藏 URL 中的参数?

谢谢!

【问题讨论】:

  • 最大的问题是,为什么首先要隐藏查询字符串参数?据推测,有问题的用户被授权查看这两个页面。如果您试图阻止 URL 操纵攻击,有更好的方法通过使用授权(角色)来做到这一点,但这可能需要从根本上重新设计您的架构。
  • @howcheng 感谢您的快速回复。你是对的。我已经在使用授权,因此我不需要总是隐藏参数。如果我想将对象作为参数传递,我只会隐藏它们!非常感谢。

标签: c# asp.net .net asp.net-mvc query-string


【解决方案1】:

你可以试试这个代替 Session

TempData["temp_data"]

【讨论】:

  • 根据我的阅读,存储在 TempData 中的数据仅供一次性使用,所以它不会重现我遇到的同样问题吗?
  • TempData 不会将您的 id 或数据发送给您的客户端,因此我不会显示在 url 中。单次使用仅意味着每个请求,它将适用于控制器内的所有 recuest 和重定向。
【解决方案2】:

我得出的结论是,由于我已经在我的应用程序中使用了授权和角色,我不需要总是隐藏参数。每当我将复杂对象作为参数传递时,我都可以简单地隐藏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多