मैं आईएसआई 6 में होस्ट की गई मेरी एएसपी.NET 3.5 वेबसाइट के लिए सुरक्षा उपाय के रूप में व्यूस्टेट एन्क्रिप्शन हमेशा चालू करने का प्रयास कर रहा हूं। हमारे पास व्यूस्टेट बंद है लेकिन अभी भी इस स्ट्रिंग में कुछ "कंट्रोलस्टेट" दिखाई देता है। एक परीक्षण वातावरण में मैं बस web.config में निम्नलिखित सेट करने में सक्षम हूँ और मैं अब बेस 64 अर्द्ध प्लेन को viewstate को डिकोड कर सकते हैं:एएसपीनेट व्यूस्टेट एन्क्रिप्शन समस्या
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
मैं भी जोड़ लिया है निम्नलिखित (machine key generater द्वारा genereated) machine.config के लिए और अभी भी अपने परीक्षण सर्वर पर viewstate ठीक एन्क्रिप्ट करता है:
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
मेरे गैर परीक्षण वातावरण को सादे पाठ में viewstate मैं हमेशा बेस 64 डिकोड कर सकते हैं, जैसा कि ऊपर परिवर्तन लेने के लिए प्रतीत नहीं होता उपरोक्त सेटिंग्स के साथ। मैं हमेशा कोई बदलाव करने के बाद iisreset।
मेरी गैर-परीक्षण वेबसर्वर के बारे में कुछ जानकारी:
- वेब फार्म/लोड संतुलित (लेकिन परीक्षण के लिए केवल एक ही सर्वर अभी)
- Sql सत्र स्थिति (machine.config में machinekey शुरू में की जरूरत थी इसे सेट अप करने)
- machine.config: उपयोग में लाने खुदरा = "true"
किसी को भी अतिरिक्त सेटिंग का asp.net viewstate एन्क्रिप्शन के साथ हस्तक्षेप कर सकते हैं देखने के लिए जहां का सुझाव कर सकते हैं?
संपादित करें: अब मेरे आईआईएस परीक्षण सर्वर पर मैं viewStateEncryptionMode सेटिंग को पूर्ववत नहीं कर सकता क्योंकि यह दृश्यमान को एन्क्रिप्ट कर रहा है, भले ही मैं इसे "कभी नहीं" पर सेट करता हूं और मेरी कोई भी अन्य वेबसाइट इस सेटिंग को पकड़ने लगती है। मैं कहां देख सकता हूं कि यह संपत्ति कहां से ओवरराइड हो रही है? क्या कोई सेटिंग है जहां यह सेटिंग संग्रहीत की जाती है जिसे साफ़ किया जाना चाहिए इसके अलावा जब मैं iisreset/www सेवा/touch machine.config को रोकूं तो क्या किया जाएगा?
अंतिम संपादित करें: कॉन्फ़िगरेशन फ़ाइलों का अध्ययन करने के कुछ दिनों बाद मैंने इसे छोड़ दिया और कोड के माध्यम से इसे कार्यान्वित किया। मेरे पास पहले से ही एक सुरक्षा मॉड्यूल था जो पेज इवेंट में संलग्न था इसलिए पेज_लोड में मैंने जोड़ा: पेज। रजिस्ट्रार रिक्वेयरव्यूस्टेटएन्क्रिप्शन();
मैं सच में पता है कि IIS6 तुरंत उठाया होने से इस सेटिंग को रोकने था प्यार होता। जब मैं स्थानीय रूप से कैसिनी चलाता हूं, तो यदि मैं व्यूस्टेट एन्क्रिप्शन मोड को पेज नोड के माध्यम से "हमेशा" पर सेट करता हूं तो मैं तुरंत इसे व्यूस्टेट को एन्कोड करता हूं और अतिरिक्त छिपे हुए फ़ील्ड को id = "__ VIEWSTATEENCRYPTED" के साथ प्रस्तुत करता हूं। जब मैं इसे "कभी नहीं" पर सेट करता हूं तो मैं तुरंत एन्क्रिप्शन बंद कर देता हूं। अगर मैं अपनी आईआईएस 6 होस्टेड वेबसाइट पर वेबसाइट पर वही सटीक परिवर्तन करता हूं, तो इसका कोई प्रभाव नहीं पड़ेगा, लेकिन अगर मैं वहां रहने की अनुमति देता हूं तो अंततः इसे पकड़ लिया जाएगा। मैं www सेवा को रोक/शुरू करूंगा, आईएस रीसेट कर दूंगा, एएसपीएनईटी टेम्प कैश साफ़ करूँगा लेकिन मुझे नहीं पता कि और क्या प्रयास करना है? उम्मीद है कि यह पोस्ट थोड़ी देर के लिए आरओटी कर सकता है और भविष्य में किसी को भी वही व्यवहार दिखाई देगा जो हम अनुभव करते हैं और हम इसे और समझ सकते हैं!
यह पता चला है कि RegisterRequiresViewStateEncryption भी ViewstateMAC सत्यापन पर बदल जाता है भले ही मैं इसे स्पष्ट रूप से अपने web.config में गलत पर सेट करता हूं। चूंकि मेरी साइट एक कस्टम "एमवीसी" है जो वेबफॉर्म के शीर्ष पर बैठती है जहां मैं कभी-कभी पोस्ट पर विभिन्न पृष्ठों पर रीडायरेक्ट करता हूं, मेरे पास मैक सत्यापन नहीं हो सकता है। मैं सोच रहा हूं कि ViewStateMAC = false और ViewStateEncryption = true की मेरी web.config सेटिंग्स एक अच्छा संयोजन नहीं था। – felickz