2014-07-23 8 views
8

मैंने एमवीसी 5 में ValidateAntiForgeryTokenAttribute का उपयोग करके एंटी-जाली सुरक्षा लागू की है। यह ठीक काम कर रहा है, लेकिन भविष्य में हम होस्टिंग के लिए "वेब फार्म" दृष्टिकोण में जा सकते हैं। यदि मैं अपना आवेदन विकास में चलाता हूं और किसी फॉर्म पर जाता हूं, तो वेब सर्वर को पुनरारंभ करें (विजुअल स्टूडियो में ऐप को पुनरारंभ करके) और फिर एक फॉर्म सबमिट करें, यह System.Web.Mvc.HttpAntiForgeryException को फेंक नहीं देता है।वेब सर्वर पुनरारंभ के बीच एमवीसी विरोधी जालसाजी टोकन कैसे जीवित रहता है?

हमारा आवेदन किसी अन्य सत्र स्थिति का उपयोग नहीं करता है। क्या कोई मेरी समझ में मदद कर सकता है कि मेरा सर्वर कहां से निकलता है? मैं अपने web.config में किसी मशीन को परिभाषित नहीं कर रहा हूं, या कहीं और जो मुझे मिल सकता है। क्या विकास के माहौल में चलने के साथ इसका कुछ संबंध है?

एमवीसी के पुराने संस्करणों के लिए मुझे यह एकमात्र संदर्भ मिल सकता है, इसलिए मैं सोच रहा हूं कि यह अब अलग तरीके से हल हो गया है या नहीं।

मुझे खुशी है कि यह कार्यक्षमता काम करती है, लेकिन मुझे समझने की आवश्यकता क्यों है।

उत्तर

2

सर्वर स्वयं कुछ भी याद नहीं कर रहा है; यह करने की ज़रूरत नहीं है। यहां काम पर

दो बातें हैं:

  • प्रपत्र छिपा इनपुट
  • एक कुकी

इसका मतलब यह है कि उपयोगकर्ता उस पर एक AntiForgeryToken, तो साथ एक पृष्ठ पर जाता है, तो सर्वर पुनरारंभ होता है, यह कोई समस्या नहीं है क्योंकि उपयोगकर्ता और फॉर्म का __RequestVerificationToken अभी भी वही है जैसा वे थे।

वास्तविक सुरक्षा टोकन एक हैश कुंजी है जो AntiForgeryToken ऑब्जेक्ट के अंदर संग्रहीत है। इस ऑब्जेक्ट को Base 64 पर क्रमबद्ध किया गया है और जब आप __RequestVerificationToken के मानों को देखते हैं तो आप यही देखते हैं। चूंकि सुरक्षा कुंजी प्रत्येक बार संग्रहीत होती है, भले ही सर्वर मान को रीसेट करता है फिर भी उन ऑब्जेक्ट्स के अंदर होता है। तब टोकन को सत्यापित करने के लिए कुंजी को पुनर्प्राप्त और तुलना की जाती है।

इस प्रक्रिया के दौरान कोई डिक्रिप्शन नहीं है। टोकन deserialised हैं, सुरक्षा कुंजी पढ़ा और फिर तुलना की। चूंकि सुरक्षा कुंजी एन्क्रिप्ट नहीं की गई हैं, लेकिन हैं है, तो उन्हें डिक्रिप्ट नहीं किया जा सकता है; केवल तुलना की।

+0

इसके लिए धन्यवाद। मुझे पता है कि दो मानों की तुलना की जाती है, लेकिन मुझे लगता है कि आईआईएस पुनरारंभ होने पर मूल्यों को डिक्रिप्ट करने के लिए उपयोग की जाने वाली एन्क्रिप्शन कुंजी को पुन: उत्पन्न किया जाना चाहिए। ऐसा होने के बाद मानों को डिक्रिप्ट करने में सक्षम नहीं होना चाहिए क्योंकि कुंजी नई है। – DustinA

+0

आह, मैं देख रहा हूं कि आप क्या पूछ रहे हैं। महान सवाल मैं अपना जवाब अपडेट करूंगा। –

+0

मैं उस उत्तर को लिखने के लिए आपके द्वारा लिया गया समय की सराहना करता हूं, लेकिन मुझे यकीन नहीं है कि यह सही है। यह माइक्रोसॉफ्ट वेबसाइट कहती है कि "एंटी-एक्सएसआरएफ टोकन के पेलोड एन्क्रिप्टेड और हस्ताक्षरित हैं"। यहां पृष्ठ का यूआरएल है: http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages। मेरा मानना ​​है कि मेरे मामले में क्या हो रहा है यह है कि मशीनकी एन्क्रिप्ट और डिक्रिप्ट करने के लिए उपयोग की जाती है, वास्तव में वेबसाइट या ऐप पूल को पुनरारंभ करने के बीच वास्तव में परिवर्तित नहीं होती है। मुझे अभी तक समर्थन करने के लिए प्रलेखन नहीं मिल रहा है, लेकिन मुझे लगता है कि ऐसा हो रहा है। – DustinA

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