2011-12-22 12 views
7

पर विफल रहता है मेरी MVC 3 परियोजना में मैं विरोधी जालसाजी तर्क फ़ायरफ़ॉक्स & ओपेरा पर MVC 3.ASP.NET MVC 3 वेब साइट विरोधी जालसाजी टोकन केवल IE

में बनाया गया यह काम करता है का उपयोग करता है एक प्रवेश पृष्ठ है ठीक है, लेकिन IE पर मैं इस मिल:

A required anti-forgery token was not supplied or was invalid. 

मैं वास्तव में क्यों केवल IE इस ग्रस्त है पर स्टम्प्ड रहा हूँ, मैं कुकी सेटिंग्स की जाँच की और वे सेट एक ही हैं जैसे दूसरे ब्राउज़र तो मैं एक पर हूँ यहाँ खो गया

जब मैं विरोधी जालसाजी कोड का उपयोग करता हूं, तो मैं एक एसएएलटी और डोमेन चेक दोनों का उपयोग करता हूं (जो कोई फर्क नहीं पड़ता लेकिन कहने लायक है)।

@model login.Models.LogOnModel 

@{ 
    ViewBag.Title = "Log On"; 
} 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<script type="text/javascript"> 
$(function() { 
    //focus on form. 
    $("#UserName").focus(); 
}); 
</script> 

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @class = "form login" })) { 
@Html.AntiForgeryToken("[email protected]#Hq4(", ViewBag.AppDomain, "/") 
<div id="box"> 
<h1>Login</h1> 
Please enter your username and password. @Html.ActionLink("Register", "Register") if you don't have an account. 
<div class="block" id="block-login"> 
    <h2> 
     Login Form</h2> 
    <div class="content login"> 
       @Html.ValidationSummary(true) 
     <div class="group buffer"> 
      <div class="left"> 
       <label class="label right"> 
        @Html.LabelFor(m => m.UserName)</label> 
      </div> 
      <div class="right"> 
       @Html.TextBoxFor(m => m.UserName, new { @class = "text_field" }) 
       @Html.ValidationMessageFor(m => m.UserName) 
      </div> 
     </div> 
     <div class="group buffer"> 
      <div class="left"> 
       <label class="label right"> 
        @Html.LabelFor(m => m.Password)</label> 
      </div> 
      <div class="right"> 
       @Html.PasswordFor(m => m.Password, new { @class = "text_field" }) 
       @Html.ValidationMessageFor(m => m.Password) 
      </div> 
     </div> 
     <div class="group buffer"> 
      <div class="left"> 
       <label class="label right"> 
        @Html.LabelFor(m => m.RememberMe)</label> 
      </div> 
      <div class="right"> 
       @Html.CheckBoxFor(m => m.RememberMe) 
      </div> 
     </div> 
     <div class="group navform buffer"> 
      <div class="right"> 
       <button class="button" type="submit"> 
        <img src="@Url.Content("~/Content/images/icons/key.png")" alt="Save" /> 
        Login 
       </button> 
      </div> 
     </div> 
    </div> 
</div> 
</div> 
} 

ViewBag.AppDomain परीक्षण और उत्पादन के उपयोग के दौरान आसान स्थापना के लिए web.config से एक मूल्य है:

यहाँ दृश्य कोड है।

यदि मैं एंटीफॉर्गेरी टैग से डोमेन और पथ भाग को हटा देता हूं, तो यह ठीक काम करता है। तो उन दोनों में से एक समस्या होना चाहिए।

+1

आप अपना दृश्य कोड पोस्ट कर सकते हैं ? –

+0

हाय, आप IE का किस संस्करण का उपयोग कर रहे हैं? –

+0

क्या आप आईई के देव उपकरण, फ़ायरबग लाइट या फिडलर का उपयोग कर सकते हैं) यह पता लगाने के लिए कि क्या आपका 'POST' अनुरोध एंटीफ़ोर्गेरी कुकी वापस भेज रहा है? – isNaN1247

उत्तर

0

नहीं मेरी पसंदीदा विचार है, लेकिन जब तक मैं यह पता लगा सकते हैं मैं बाहर जो आईई खुश करता डोमेन और पथ मापदंडों लिया।

अगर किसी के पास कोई सुझाव है, तो मैं खुला हूं, लेकिन अभी के लिए मैं टोकन को बस से निपटने के साथ बसूंगा।

आपकी मदद के लिए सभी को धन्यवाद।

+0

क्या आप डोमेन और पथ पैरामीटर को ले कर अपना मतलब बता सकते हैं? किस पर? मुझे यह समस्या है और अब तक इसे हल करने में असमर्थ हूं। नियंत्रक पर – Termato

+1

, आप एक विशेषता के माध्यम से डोमेन सेट कर सकते हैं, मैंने इसे वहां से हटा दिया। मैं कोड पोस्ट करूंगा लेकिन इस ऐप को वापस कर दिया गया था और तब से मैं इसे से आगे बढ़ गया हूं। – Eman

6

कस्टम एंटीसीआरएफ टोकन निर्माता का उपयोग करते समय मुझे इसी तरह की एक समस्या थी। मैं एमवीसी 3 का उपयोग नहीं कर रहा था लेकिन यह एक सिमिलर मुद्दा हो सकता है।

मेरे लिए मुद्दा यह था कि साइट का परीक्षण करने के लिए मैं स्थानीय रूप से डोमेन नाम का उपयोग कर रहा था, इसमें अंडरस्कोर था। सिद्धांत रूप में एक DNS नाम में अंडरस्कोर नहीं हो सकता है (भले ही "कंप्यूटर नाम" हो सकता है), इसलिए IE कुकीज़ को सहेज नहीं रहा था।

यह एक ही समस्या नहीं हो सकती है, लेकिन एक परीक्षण वातावरण से संबंधित कुछ हो सकता है और जिस तरह से कुकीज़ आईई द्वारा नियंत्रित की जाती है।

आईई कुकी हैंडलिंग के आंतरिक के बारे में यहां एक बहुत ही रोचक लेख है जो आपको इस मुद्दे को उजागर करने में मदद कर सकता है।

http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

+0

मेरा डोमेन परीक्षण के दौरान सिर्फ स्थानीयहोस्ट है। – Eman

+1

@ php-jquery-programmer ओह एक शॉट के लायक है। आपको लिंक उपयोगी मिल सकता है, इसे अन्य उपयोगी टिप्स का भार मिल गया है। –

1

मुझे वीएस -2010 में निर्मित एमवीसी 3 प्रोजेक्ट में एक ही समस्या थी और आईई 11 के माध्यम से देखा गया (यह फ़ायरफ़ॉक्स में ठीक काम करता है)।

तरह से है कि मैं इसे चारों ओर पाने में कामयाब रहे रूट निर्देशिका में web.config फ़ाइल में "रूपों" तत्व के लिए कुकी-= "UseCookies" जोड़कर था:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="2880" slidingExpiration="true" requireSSL="false" cookieless="UseCookies"/> 
</authentication> 
+0

मैं वीएस2012 में एमवीसी 4 का उपयोग कर रहा हूं और आईई 10 में देख रहा हूं। यह मेरे लिए काम नहीं लग रहा है। क्या आप जानते हैं कि यह क्यों काम नहीं करेगा? यह एक असली मस्तिष्क ट्विस्टर है। – Termato

+0

मैंने अभी तक एमवीसी 4 और वीएस2012 के साथ कोई काम नहीं किया है, इसलिए मुझे नहीं पता कि यह इसे अलग तरीके से संभालता है या नहीं। कुछ और जो आप कोशिश कर सकते हैं यह सुनिश्चित करना होगा कि उपयोगकर्ता नकली विरोधी टोकन काम करने के लिए कुकीज़ को आपकी वेबसाइट के लिए स्वीकार करने की अनुमति दे रहा है। – Ally

संबंधित मुद्दे