2009-12-16 17 views
8

पर रीडायरेक्ट करने के लिए सबसे अच्छा अभ्यास मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें एक पृष्ठ है जिसे SSL प्रमाणपत्र का उपयोग करने की आवश्यकता है। इस पृष्ठ पर साइट के सभी लिंक http के बजाय https का उपयोग करते हैं, लेकिन यदि उपयोगकर्ता सीधे पृष्ठ पर नेविगेट कर सकता है तो मैं पृष्ठ के http संस्करण को अपने आप रीडायरेक्ट करना चाहता हूं लेकिन https का उपयोग करना चाहता हूं।एएसपी.नेट: https

मैं पेज_लोड ईवेंट में एक प्रतिक्रिया। रेडियोधर्मी कर सकता हूं। मैं जावास्क्रिप्ट लिख सकता हूं जो location.href को अपडेट करेगा जो पोस्टबैक का कारण बन जाएगा। मुझे यकीन है कि इस बिल्ली को त्वचा के लिए और तरीके हैं।

मेरा सवाल यह है कि आईआईएस 6 या 7 पर एएसपी.NET साइट के लिए http पृष्ठ को https पर रीडायरेक्ट करने के लिए सबसे अच्छा अभ्यास क्या है? क्या कोई सर्वोत्तम अभ्यास है या सभी विकल्प बराबर हैं?

+0

fwiw - इस पोस्टिंग, और कुछ अन्य तरीकों का इस्तेमाल किया करने के बाद जिस तरह से, मैं निम्नलिखित पिछली चर्चा बहुत उपयोगी पाया: http://stackoverflow.com/questions/47089/best-way-in-asp-net-to-force-https-for-an-entire-site –

उत्तर

12

मुझे लगता है कि ऐसा करने के लिए पुनर्लेखन URL का उपयोग होगा। क्यूं कर? क्योंकि इसे लागू करना आसान है, एप्लिकेशन में कोई संशोधन की आवश्यकता नहीं है, और इसे बनाए रखना आसान है।

IIS7 पर आप पूरा कर सकते हैं कि, URL rewrite module का उपयोग कर उदाहरण के लिए:

<!-- http:// to https:// rule --> 
<rule name="ForceHttpsBilling" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="false" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

IIS6 पर आप एक 3 पार्टी पुस्तकालय का उपयोग करना होगा। मैं आईआईआरएफ (http://www.codeplex.com/IIRF) का उपयोग करता हूं, यह मुफ़्त, स्थिर है, और इसकी अच्छी मात्रा में विशेषताएं हैं I

+0

एक उदाहरण पावेल जोड़ने के लिए धन्यवाद। मैं अभी भी आईआईएस 6 पर हूं इसलिए आईआईएस 7 के पुनर्लेखन मॉड्यूल के साथ गंदे नहीं हुए हैं। हालांकि यह आशाजनक दिखता है :) – Ariel

1

मैं पेज_लोड में Response.Redirect को कॉल करूंगा। जावास्क्रिप्ट उत्पन्न करने से यह आसान है, और ग्राहक को कम बाइट भेज देगा।

Code example

+0

रे - यह उपयोग करते समय कम बाइट भेजने के बारे में एक शानदार बात है प्रत्येक अनुरोध में भेजा गया जावास्क्रिप्ट के बजाय CodeFile तर्क।धन्यवाद –

+0

जेएस के माध्यम से रीडायरेक्ट करते समय आपको जेएस के बिना या जेएस अक्षम के बिना ग्राहकों के बारे में सोचना होगा, जिससे एप्लिकेशन कम सुरक्षित हो जाएगा। सर्वर-साइड सत्यापन हल्का और अधिक सुरक्षित है। – Ariel

2

असल में सबसे अच्छा अभ्यास तीन स्थानों में से एक में ऐसा करना होगा, मानते हैं कि हार्डवेयर या आईआईएस सेटिंग्स एक विकल्प नहीं हैं। बस कोड विकल्प।

  1. HTTP मॉड्यूल में। किसी अनुरोध के संसाधित होने से पहले HttpModules चलाए जाते हैं, ताकि आप यूआरएल जांच कर सकें और वहां रीडायरेक्ट कर सकें। क्या यही मुझे करना होगा।
  2. ग्लोबल.एक्सएक्स में।
  3. एक कस्टम बेस पेज में, init फ़ंक्शन में।

उन सभी में अच्छे विकल्प होंगे। एएसपी.नेट द्वारा संसाधित प्रत्येक अनुरोध से एक और दो को हिट करने की गारंटी है। तीसरे व्यक्ति के लिए यह सुनिश्चित करना आवश्यक है कि आप सुनिश्चित करें कि आपके सभी पृष्ठ बेस पेज से प्राप्त होते हैं।

मैं प्रत्येक पृष्ठ में कोड नहीं डालूंगा, यह सिर्फ खराब प्रोग्रामिंग है।

मुझे बताएं कि आपको अधिक स्पष्टीकरण की आवश्यकता है, लेकिन यह एक अच्छी शुरुआत है।

+1

+1 बहुत वैध उत्तर को पता नहीं है कि क्यों कोई भी DV'd –

1

आम तौर पर, साइट के विशिष्ट भाग होते हैं जिन्हें आप हमेशा HTTPS, या HTTP होना चाहते हैं।

मैं निम्नलिखित कार्रवाई विशेषता का उपयोग या तो एक या दूसरे के लिए यातायात परिवर्तित करने के लिए:

public class ForceConnectionSchemeAttribute : ActionFilterAttribute 
{ 
    private string scheme; 

    public ForceConnectionSchemeAttribute(string scheme) 
    { 
     this.scheme = scheme.ToLower(); 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Uri url = filterContext.HttpContext.Request.Url; 
     if (url.Scheme != scheme) 
     { 
      string secureUrl = String.Format("{0}://{1}{2}", scheme, url.Host, url.PathAndQuery); 
      filterContext.Result = new RedirectResult(secureUrl); 
     } 
    } 
} 


// Suppose I always want users to use HTTPS to access their personal info: 
[ForceConnectionScheme("https")] 
public class UserController: Controller 
{ 
    // blah 
} 
+0

यह दृष्टिकोण मानता है कि आप एमवीसी का उपयोग कर रहे हैं। –