有什么方法可以使用 asp.net MVC 隐藏查询字符串,使其不显示在搜索和过滤器中
is there any way to hide a query string from showing in search and filter using asp.net MVC
我实现了一个基本的排序——带排序的过滤
控制器中的索引代码
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存储过程 ) 可以显示一些数据库架构 –
- 并非每个查询字符串都会导致安全漏洞。您必须定义不应在查询字符串中显示的敏感数据。
- 如果你想隐藏你需要使用 "POST" 而不是 "GET"。但是,使用Fiddler等包嗅探工具或浏览器的调试工具,仍然可以发现查询参数。
- 如果您只是在代码中构造 SQL 语句,请注意 SQL 注入。例如,有人可能会传递“; drop table xx;”作为查询字符串。
- 查询字符串可以加密 - https://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-QueryString-Parameter-Values-in-ASPNet-using-C-and-VBNet.aspx
我实现了一个基本的排序——带排序的过滤
控制器中的索引代码
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存储过程 ) 可以显示一些数据库架构 –
- 并非每个查询字符串都会导致安全漏洞。您必须定义不应在查询字符串中显示的敏感数据。
- 如果你想隐藏你需要使用 "POST" 而不是 "GET"。但是,使用Fiddler等包嗅探工具或浏览器的调试工具,仍然可以发现查询参数。
- 如果您只是在代码中构造 SQL 语句,请注意 SQL 注入。例如,有人可能会传递“; drop table xx;”作为查询字符串。
- 查询字符串可以加密 - https://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-QueryString-Parameter-Values-in-ASPNet-using-C-and-VBNet.aspx