【发布时间】:2014-06-26 22:49:30
【问题描述】:
我正在寻找查询字符串的安全替代方案,我将在同一控制器上将参数传递给控制器方法并将其作为视图返回。
类别视图:
@foreach (Project.Framework.ModelClasses.productCategories productCategories in ViewBag.Categories)
{
@Html.ActionLink(productCategories.description, "Products", "Shop", new { id = "", categoryID = productCategories.categoryID, description = productCategories.description }, null)
}
控制器方法:
public ActionResult Products(string categoryID, string keyword, string description)
{
ViewBag.appPath = ConfigurationManager.AppSettings["appPath"].ToString();
Methods Methods = new Methods();
Methods.tokenHeader = (string)Session["token"];
Methods.cookieContainer = (CookieContainer)Session["cookies"];
Response shopnowProductsResponse = Methods.shopnowProductsGet(categoryID, keyword);
if (shopnowProductsResponse.Code == "000")
{
List<product> products = new List<product>();
products = (List<product>)shopnowProductsResponse.Data;
string FPRFlag = "0";
foreach (product product in products)
{
if (FPRFlag != "1")
{
if (product.FPRFlag == "1")
{
FPRFlag = product.FPRFlag;
}
}
else
{
goto nextState;
}
}
nextState:
ViewBag.FPRFlag = FPRFlag;
ViewBag.Description = description;
ViewBag.Products = products;
}
return View();
}
注意:关键字是可选的
【问题讨论】:
-
您在问题中使用的“安全”是什么意思? (也许签署数据可以解决它?)
-
特别是,如果它是 URL 的一部分而不是查询字符串,它是否足够安全?让它成为路线的一部分?
-
出于安全原因,我无法通过 URL 传递任何参数,因为我正在传递敏感数据。
-
定义“安全”。您需要对用户隐藏它吗?对监控流量的人隐瞒?您是否需要能够进行完整性检查? “安全”意味着很多东西。
-
如果是敏感数据,那么你应该把它保存在服务器端并放在会话中。根据定义,您发送给客户端(浏览器)的任何内容都是不安全的。您当然可以对其进行加密,但是当您可以将其保留在服务器端时,为什么还要经历所有这些麻烦呢。
标签: c# asp.net-mvc parameter-passing