2016-09-12 4 views
0

通貨メニューをクリックすると、前のページのページをリダイレクトしようとしています。このメニューでは、選択した通貨をクッキーに設定し、Request.UrlReferrer.ToString()にリダイレクトするので、ページ自動要求Cookieを読み取り、通貨を適用します。ここで は、例えば私のコードRequest.UrlReferrer.ToString()IEでリロードしない

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に戻り、その後のアクション以上でCurrencyControllerに要求を送信今USDに量を持つユーザー通貨の変更をいくつかのアイテムを持っているPAGE1。

上記のコードはすべてのブラウザで正常に動作しますが、IE 11では動作しません。 私が間違っているところを教えてください。

おかげ

答えて

0

まず第一に、あなたはUrlReferrerに頼るべきではありません。その値は、送信されることが保証されていないHTTPヘッダーから得られ、が送信されたとしても、が改ざんされる可能性があります。自分のやり方でそれを使用することで、CSRFや中間者攻撃に身を任せています。

このようなことを行う正しい方法は、返すURLに沿って渡すことです。たとえば、ユーザーが/foo/のようなURLにアクセスしてから、その後に/foo/にリダイレクトするリンクをクリックすると、リンクのURLは/bar/?returnUrl=/foo/のようになります。悪意のある攻撃を防ぐために、

public ActionResult Bar(string returnUrl) 
{ 
    // do something 

    if (Url.IsLocalUrl(returnUrl)) 
    { 
     return Redirect(returnUrl); 
    } 
    // redirect to default 
} 

Url.IsLocalUrlチェックが再び、リターンURLは現在のサイト上のパスがあることを確認することです。

その後、/bar/への対応行動のような何かをするだろう。

関連する問題