का उपयोग कर AJAX अनुरोधों में सीएसआरएफ संरक्षण, जो पृष्ठ मैं बना रहा हूं वह AJAX पर भारी निर्भर करता है। असल में, केवल एक "पृष्ठ" है और प्रत्येक डेटा स्थानांतरण AJAX के माध्यम से संभाला जाता है। चूंकि ब्राउजर साइड पर अतिव्यापी कैशिंग अजीब समस्याएं उत्पन्न करती है (डेटा पुनः लोड नहीं किया जाता है), मुझे POST का उपयोग करके सभी अनुरोध (पढ़ा जाता है) करना होता है - जो एक रीलोड को मजबूर करता है।एमवीसी 2
अब मैं सीएसआरएफ के खिलाफ पृष्ठ को रोकना चाहता हूं। फॉर्म सबमिशन के साथ, Html.AntiForgeryToken()
का उपयोग अच्छी तरह से काम करता है, लेकिन AJAX- अनुरोध में, मुझे लगता है कि मुझे टोकन मैन्युअल रूप से जोड़ना होगा? क्या बॉक्स के बाहर कुछ भी उपलब्ध है?
मेरे वर्तमान प्रयास यह की तरह दिखता है:
मैं मौजूदा जादू पुन: उपयोग करने में खुशी होगी। हालांकि, HtmlHelper.GetAntiForgeryTokenAndSetCookie
निजी है और मैं एमवीसी में चारों ओर हैक करना नहीं चाहता हूं। कि टोकन को सत्यापित करने के लिए: अन्य विकल्प की तरह
public static string PlainAntiForgeryToken(this HtmlHelper helper)
{
// extract the actual field value from the hidden input
return helper.AntiForgeryToken().DoSomeHackyStringActions();
}
जो कुछ हद तक hacky है और अनसुलझी बड़ा समस्या छोड़ देता है एक विस्तार लिखने के लिए है? डिफ़ॉल्ट सत्यापन कार्यान्वयन फॉर्म फ़ील्ड का उपयोग करने के खिलाफ आंतरिक और हार्ड-कोडित है। मैंने थोड़ा संशोधित ValidateAntiForgeryTokenAttribute
लिखने की कोशिश की, लेकिन यह AntiForgeryDataSerializer
का उपयोग करता है जो निजी है और मैं वास्तव में इसे कॉपी नहीं करना चाहता था।
इस बिंदु पर घर के समाधान के साथ आने में आसान लगता है, लेकिन यह वास्तव में डुप्लिकेट कोड है।
कोई सुझाव यह स्मार्ट तरीका कैसे करें? क्या मैं कुछ पूरी तरह से याद कर रहा हूँ?
शानदार! एक जादू की तरह काम करता है! मुझे नहीं पता कि पोस्ट किए गए फ़ील्ड 'Request.Form' में समाप्त हो जाएंगे। बहुत साफ चयन कथन के लिए +1। चीयर्स! – mnemosyn