【问题标题】:is there any way to hide a query string from showing in search and filter using asp.net MVC有没有办法使用asp.net MVC在搜索和过滤器中隐藏查询字符串
【发布时间】:2018-05-25 17:05:07
【问题描述】:

我实现了一个基本的排序——用排序过滤

控制器中的索引代码

 public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var students = from s in db.Students
                           select s;
            if (!String.IsNullOrEmpty(searchString))
            {
                students = students.Where(s => s.LastName.Contains(searchString)
                                       || s.FirstMidName.Contains(searchString));
            }
            switch (sortOrder)
            {
                case "name_desc":
                    students = students.OrderByDescending(s => s.LastName);
                    break;
                case "Date":
                    students = students.OrderBy(s => s.EnrollmentDate);
                    break;
                case "date_desc":
                    students = students.OrderByDescending(s => s.EnrollmentDate);
                    break;
                default:  // Name ascending 
                    students = students.OrderBy(s => s.LastName);
                    break;
            }

            int pageSize = 3;
            int pageNumber = (page ?? 1);
            return View(students.ToPagedList(pageNumber, pageSize));
        }

代码运行良好

我要问的是,是否有任何方法可以实现相同的代码,而无需向最终用户显示查询参数,如图所示。

是否可以使用视图模型之类的东西隐藏此参数 - 表单集合或使用基于路由 - 是否存在与使用查询字符串的这种工作方式相关的安全性问题 - 请注意,此示例只是我想使用 contoso 大学 (Microsoft 演示) 做的演示,并且可以肯定在此上下文中我不需要隐藏查询字符串,但在另一个上下文中 (使用 ado.net 存储过程) 可以展示一些数据库架构——

【问题讨论】:

  • 你有没有想过使用带字符串的模型活页夹?
  • 您可以考虑在页面加载后通过 jQuery 删除查询字符串的多余部分
  • 如果有任何 sn-p 或代码可以遵循,这将是一个很好的起点,谢谢
  • 您到底为什么要“隐藏”它?用户在文本框中输入了 "a",因此他们希望它出现在查询字符串中
  • 在另一个上下文中(使用 ado.net 存储过程)可以展示一些数据库架构

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


【解决方案1】:
  1. 并非每个查询字符串都会导致安全漏洞。您必须定义不应在查询字符串中显示的敏感数据。
  2. 如果你想隐藏你需要使用“POST”而不是“GET”。但是,使用 Fiddler 等包嗅探工具或浏览器的调试工具,仍然可以发现查询参数。
  3. 如果只是在代码中构造 SQL 语句,请注意 SQL 注入。例如,有人可能会通过“; drop table xx;”作为查询字符串。
  4. 查询字符串可以加密 - https://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-QueryString-Parameter-Values-in-ASPNet-using-C-and-VBNet.aspx

【讨论】:

  • 无缘无故被否决。但是,我希望我的努力对某人有所帮助。
  • 感谢您的努力,我没有对您的回答投反对票。因为它对我有帮助,所以我投赞成票以等同于投反对票
  • 查询字符串是用户在文本框中输入的值 - 没有什么“敏感”的。 OP 不能使用 POST。这里没有涉及“SQL 注入”(它使用 EF)。并且对其进行加密毫无意义(无论如何也不可能)。您在这里所说的一切都与 OP 的问题无关。
  • @StephenMuecke 他根据这里的答案更新了问题,请随时分享我不知道的内容;)
  • OP 无法“隐藏”查询字符串 - 如果是,则该值将不会发送到服务器并且控制器方法将不起作用。为什么 OP 认为他们想要这样做是没有意义的。
猜你喜欢
  • 2021-06-17
  • 1970-01-01
  • 2019-08-20
  • 2021-10-12
  • 1970-01-01
  • 2018-04-17
  • 2017-02-20
  • 2012-12-22
相关资源
最近更新 更多