当我点击货币菜单时,我尝试重定向上一页的页面。在此菜单中设置cookie中的选定货币并重定向到Request.UrlReferrer.ToString()
,以便请求页面自动读取cookie并应用货币。
这是我的代码
public ActionResult Index(string currency)
{
HttpCookie cookie = new HttpCookie("Cookie");
cookie.Values["CODE"] = currency;
cookie.Values["sym"] = Currencies[currency];
cookie.Values["Name"] = CurrenciesName[currency];
string currencyname = GetCurrencySymbol(currency);
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return Redirect(Request.UrlReferrer.ToString());
//return RedirectToRoute(Request.UrlReferrer.ToString());
}`
例如,page1有一些金额为USD的项目现在用户更改货币然后我通过上述操作向CurrencyController
发送请求然后返回到同一页面。
以上代码在所有浏览器中都运行良好,但在IE 11中无效。 让我知道我在哪里做错了。
由于
答案 0 :(得分:0)
首先,你不应该依赖UrlReferrer
。它的值来自不保证发送的HTTP头,即使 发送,它也可能被篡改。通过按照自己的方式使用它,您可以自己开展CSRF和中间人攻击。
执行此类操作的正确方法是传递要返回的URL。例如,如果用户位于/foo/
之类的网址上,然后点击您希望之后将其重定向回/foo/
的链接,则该链接的网址应为:{{1 }}
然后,响应/bar/?returnUrl=/foo/
的操作会执行以下操作:
/bar/
public ActionResult Bar(string returnUrl)
{
// do something
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
// redirect to default
}
检查是为了确保返回URL是当前站点上的路径,以防止恶意攻击。