2012-03-15 13 views
7

के सभी लिंक बदलती है मेरे पास एक एएसपी एमवीसी 3 वेबसाइट है जिसमें फीडबैक फॉर्म है और उसे SSL की आवश्यकता होनी चाहिए।एएसपी एमवीसी 3 RequHttps विशेषता https

अब, मेरे पास 'संपर्क यू' नामक नियंत्रक के अंदर फीडबैक नामक एक क्रिया है जो प्रतिक्रिया देखने और संसाधित करने के लिए ज़िम्मेदार है।

जब मैंने उस क्रिया पर [RequireHttps] विशेषता का उपयोग किया, तो यह अच्छा काम करता है और यह URL को "https" में बदल देता है। हालांकि, मैंने देखा है कि मेरे पृष्ठ के अंदर के सभी लिंक अब "https" पर इंगित कर रहे हैं! जैसे कि इस विशेषता ने रूटिंग इंजन को सभी लिंक पर लागू करने के लिए मजबूर किया था !!!

बेशक, एसएसएल केवल इस एकल कार्रवाई के लिए आवश्यक है और बाकी सभी को सामान्य http होना चाहिए।

क्या कोई मुझे बता सकता है कि इसे कैसे हल किया जाए?

+0

आपके अन्य पृष्ठों को केवल "http" की आवश्यकता क्यों है? क्या यह वास्तव में मायने रखता है कि वे https हैं या नहीं, जब तक कि जिन पृष्ठों को https की आवश्यकता होती है उन्हें एन्क्रिप्ट किया जाता है? –

+0

@ माइस्टेर मैन: https गंभीर रूप से वेब सर्वर प्रदर्शन को कम कर देता है। कुछ विन्यास पर यह एक बड़ा सौदा हो सकता है। –

+1

@zespri - दिनों में चला गया, https एक महत्वपूर्ण भार था। आज, मैं आपको गारंटी देता हूं कि सर्वर एन्क्रिप्ट करने से पृष्ठों को बनाने के लिए और अधिक काम करते हैं। आप कह रहे हैं कि आप थोड़ी सी लोड वृद्धि के मुकाबले अपनी साइट को असुरक्षित बना देंगे। नीचे दी गई रिक्तियां यह है कि आपने पहले से ही https लॉगिन की आवश्यकता के द्वारा लोड बनाया है, और भविष्य के अनुरोधों को अधिक अतिरिक्त प्रसंस्करण की आवश्यकता नहीं होगी। –

उत्तर

13

[RequireHttp] विशेषता ठीक है अगर तुम बाहर लॉगिन कुकी स्पष्ट हो सकता है - या आप इसे तार भर में स्पष्ट-पाठ में भेज रहे होंगे। एचटीटीपीएस कॉल की थोड़ी सी लागत से बचने के लिए यह अधिक काम हो सकता है। तो सब कुछ रीसाइक्लिंग प्रश्नों के बारे में है और आपके प्रश्न पढ़ने वाले अन्य उपयोगकर्ताओं को लगता है कि लॉगिन के बाद HTTP पर ड्रॉप करना ठीक है, जब आमतौर पर यह गलत काम होता है।

[RequireHttps] विशेषता नियंत्रक प्रकार या क्रिया विधि पर उपयोग की जा सकती है ताकि यह कह सके कि "इसे केवल SSL के माध्यम से एक्सेस किया जा सकता है।" नियंत्रक या कार्रवाई के लिए गैर-SSL अनुरोध SSL संस्करण (यदि एक HTTP GET) पर रीडायरेक्ट किया जाएगा या अस्वीकार कर दिया गया है (यदि एक HTTP पोस्ट)। आप RequHttpsAttribute को ओवरराइड कर सकते हैं और यदि आप चाहें तो इस व्यवहार को बदल सकते हैं। कोई [RequireHttp] विशेषता अंतर्निहित विशेषता है, लेकिन यदि आप चाहें तो आसानी से अपना स्वयं का बना सकते हैं।

Html.ActionLink() के अधिभार भी हैं जो प्रोटोकॉल पैरामीटर लेते हैं; आप प्रोटोकॉल के रूप में स्पष्ट रूप से "http" या "https" निर्दिष्ट कर सकते हैं। ऐसे एक अधिभार पर MSDN documentation है। यदि आप प्रोटोकॉल निर्दिष्ट नहीं करते हैं या यदि आप एक ओवरलोड को कॉल करते हैं जिसमें प्रोटोकॉल पैरामीटर नहीं है, तो यह माना जाता है कि आप चाहते थे कि लिंक वर्तमान अनुरोध के समान प्रोटोकॉल रखे।

एमवीसी में [RequireHttp] विशेषता नहीं है क्योंकि इसका वास्तव में बहुत लाभ नहीं है। यह [RequireHttps] जितना दिलचस्प नहीं है, और यह उपयोगकर्ताओं को गलत काम करने के लिए प्रोत्साहित करता है। उदाहरण के लिए, कई वेबसाइटें एसएसएल के माध्यम से लॉग इन होती हैं और लॉग इन करने के बाद HTTP पर रीडायरेक्ट करती हैं, जो करने के लिए बिल्कुल गलत बात है। आपकी लॉगिन कुकी आपके उपयोगकर्ता नाम + पासवर्ड के जितनी ही गुप्त है, और अब आप इसे पूरे तार में स्पष्ट-पाठ में भेज रहे हैं। इसके अलावा, एमवीसी पाइपलाइन चलने से पहले, आपने हैंडशेक करने और चैनल को सुरक्षित करने के लिए पहले से ही एचटीटीपीएस को HTTP से धीमा कर दिया है, इसलिए [RequireHttp] वर्तमान अनुरोध या भविष्य के अनुरोधों को अधिक नहीं करेगा और तेज।

+0

आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि मुझे LinkExtensions.ActionLink का उपयोग करना चाहिए, लेकिन मुझे नहीं पता कि इसका सही तरीके से उपयोग कैसे किया जाए। क्या आप इसे मुझे बता सकते हैं? – Yousi

+0

एक मूल प्रश्न हो सकता है, जैसा कि [यहां] (http://security.stackexchange.com/questions/12531/ssl-with-get-and-post) और [यहां] (http://stackoverflow.com/ प्रश्न/49 9 5 9 1/हैं-https-urls-एन्क्रिप्टेड) ​​'पोस्ट' अनुरोध भी एन्क्रिप्ट किया गया है, लेकिन मौसम को जानना मुझे पोस्ट में 'RequHttps' को भी सजाना चाहिए? – stom

0

आप http पर वापस जाने के लिए एक और कस्टम फ़िल्टर विशेषता बना सकते हैं। आपके मामले में इस सवाल से समाधान का प्रयास करें ... Why once SSL is enabled with [RequireHttps] at action level, it remains enabled forever?

+1

आपकी लॉगिन कुकी आपके उपयोगकर्ता नाम + पासवर्ड के जितनी ही गुप्त है, और अब आप इसे पूरे तार में क्लीयरक्स्ट में भेज रहे हैं। इसके अलावा, एमवीसी पाइपलाइन चलाने से पहले, आप हैंडशेक करने और चैनल को सुरक्षित करने के लिए पहले से ही समय ले चुके हैं (जो एचटीटीपीएस HTTP से धीमा हो जाता है), इसलिए [RequHttp] वर्तमान अनुरोध या भविष्य नहीं देगा बहुत तेजी से अनुरोध करता है। – RickAndMSFT

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