2011-11-09 26 views
5

हमारे पास एक ऐसी वेबसाइट है जो एमवीसी 3 और एक कस्टम प्रमाणीकरण विधि का उपयोग करती है जो कि फॉर्म प्रमाणीकरण पर निर्भर नहीं है - कम से कम मैं जो कह सकता हूं उससे। web.config में हमएंटीफॉर्गेरी फॉर्म फॉर्म प्रमाणीकरण के बिना टोकन

<authentication mode="None"></authentication> 

की स्थापना की और हम का उपयोग कभी नहीं/कोड में कहीं भी HttpContext.User निर्धारित किया है। समस्या यह है @ Html.AntiForgeryToken() का उपयोग करते समय कुछ मामलों में उपयोगकर्ता यह त्रुटि संदेश हो जाता है:

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

हम इस कोड के साथ OnAuthorization में सभी विरोधी जालसाजी चेकों को केंद्रीकृत:

if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0) 
{ 
    var forgery = new ValidateAntiForgeryTokenAttribute(); 
    forgery.OnAuthorization(filterContext); 
} 

है जहां अपवाद होता है। एप्लिकेशन पूल रीसायकल करते समय नई कुंजी उत्पन्न होने से रोकने के लिए हमारे पास defined a machineKey in web.config है। इससे समस्या ठीक नहीं हुई।

अगला हमने सोचा कि शायद ग्राहक का ब्राउज़र कुकीज़ नहीं भेज रहा है। हमने कुकीज़ लॉगिंग शुरू कर दी और ध्यान दिया कि कुछ मामलों में RequestVerificationToken_Lw कुकी भेजी जाती है, लेकिन अन्य में नहीं है - भले ही अन्य कुकीज़, जैसे कि Google Analytics द्वारा बनाए गए, ठीक ठीक से भेजे जाते हैं। क्या ब्राउज़र में कुछ ऐसा हो सकता है जो कुछ कुकीज़ को अलग कर रहा है और दूसरों को छोड़ रहा है?

यह anti-forgery token depends on forms authentication जैसा लगता है। क्या यह मामला है? एक विश्वसनीय तरीके से फॉर्म प्रमाणीकरण का उपयोग न करने पर एंटीफोर्गेरी टोकन का उपयोग जारी रखने का कोई भी तरीका। ध्यान रखें कि ऊपर वर्णित विधि 90% से अधिक मामलों के लिए काम करती है, लेकिन हम यह नहीं समझ सकते कि यह कुछ लोगों के लिए क्यों काम नहीं करता है।

विचार?
धन्यवाद!

+0

यदि आप किसी भी प्रमाणीकरण का उपयोग नहीं कर रहे हैं तो विरोधी जालसाजी टोकन की परवाह क्यों करें? एक सीएसआरएफ हमले का उद्देश्य एक हमलावर के लिए साइट पर कुछ प्रमाणीकृत उपयोगकर्ता की ओर से कार्रवाई करने के लिए है। और यदि कोई साइट प्रमाणीकरण का उपयोग नहीं करती है तो सीएसआरएफ जानबूझकर लगता है। –

+0

मैं प्रमाणीकरण का उपयोग कर रहा हूं, सिर्फ प्रमाणीकरण नहीं बना रहा हूं। – pbz

+0

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

उत्तर

0

क्या कुछ उपयोगकर्ताओं को यह समस्या हर समय होती है? या बस कुछ समय? साथ ही, क्या यह हर समय कुछ तरीकों से काम करता है या क्या यह एक ही क्रिया विधि के लिए असंगत है? क्या आपके पास कोई AJAX कॉल है? डिफ़ॉल्ट एंटी-जालसाजी टोकन कार्यान्वयन AJAX कॉल को संभाल नहीं करता है। लेकिन आप काम करने के लिए कुछ कस्टम कोड लिख सकते हैं

+0

मुझे नहीं पता कि यह एक उत्तर के रूप में क्यों दिखाई दिया और टिप्पणी नहीं –

+0

आपके उत्तर के लिए धन्यवाद! 1) कुछ उपयोगकर्ताओं को यह हर समय लगता है, लेकिन एक उपयोगकर्ता जो मैं संपर्क में था, कुछ हद तक गैर-तकनीकी है, इसलिए मैं बहुत ज्यादा जांच नहीं कर सका। मैं लॉग में उनके आईपी और त्रुटि देखता हूं, इसलिए मुझे पता है कि यह कानूनी है। 2) उन पृष्ठों पर कोई AJAX कॉल नहीं। मुझे उन सीमाओं के बारे में पता है और मैंने जहां आवश्यक हो वहां काम किया है। – pbz

0

क्या आप फॉर्म के अंदर एंटीफॉर्गेरी टोकन जोड़ रहे हैं? एंटीफॉर्गेरी टोकन क्लाइंट पर एक छिपे हुए HTML तत्व के माध्यम से संग्रहीत किया जाता है, इसलिए कुकी के रूप में नहीं। दूसरा प्रश्न यह होगा कि वे किस ब्राउज़र संस्करण का उपयोग कर रहे हैं? क्या नवीनतम में अपग्रेड कर सकते हैं?

@using (Html.BeginForm()) 
    { 
     @Html.AntiForgeryToken()... 
+0

हां, मैं फॉर्म के अंदर टोकन समेत हूं। मुझे नहीं पता कि वे किस संस्करण का उपयोग कर रहे हैं, लेकिन वे इंटरनेट एक्सप्लोरर का उपयोग कर रहे हैं (एक व्यक्ति के अनुसार मैं संपर्क में था)। यह अन्य लोगों के साथ हुआ है, लेकिन दुर्भाग्य से मैंने ब्राउज़र संस्करण को लॉग नहीं किया है।मुझे वापस जाना होगा और जितना अधिक डेटा प्राप्त करने के लिए मैं लॉग इन कर सकता हूं। मैं उम्मीद कर रहा था कि दूसरों को इस समस्या से पहले आया था। – pbz

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