Request.UrlReferrer.ToString()仅在IE中不重新加载

时间:2016-09-12 06:22:52

标签: asp.net-mvc internet-explorer c#-4.0 asp.net-mvc-5

当我点击货币菜单时,我尝试重定向上一页的页面。在此菜单中设置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中无效。 让我知道我在哪里做错了。

由于

1 个答案:

答案 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是当前站点上的路径,以防止恶意攻击。