2009-03-26 10 views
6

के माध्यम से पहुँचा जा सकता है मैं यह सुनिश्चित करना कैसे है कि मेरे उन शारीरिक रूप से http में टाइप नहीं कर सकते हैं: मेरी एसएसएल बाईपास और सुनिश्चित करें कि हर पृष्ठ है https :? कोसुनिश्चित करें पेज केवल एसएसएल

संभवत: मेरे मालिक पृष्ठ पर एक रीडायरेक्ट?

उत्तर

9

यह आम तौर पर IIS कॉन्फ़िगरेशन के माध्यम से या एक ISAPI फिल्टर के साथ संभाला जाना होगा, लेकिन अगर आप आवेदन कोड में यह करना चाहते हैं, तो आप अपने मास्टर पेज के Page_Init घटना में कुछ इस तरह डाल सकता है ...

If Not Request.IsSecure 
    Response.Redirect(Request.Url.AbsoluteUri.Replace("http://", "https://")) 
End If 
+2

विचारों का सबसे अच्छा नहीं है। आप क्लाइंट साइड को कॉलिंग पेज पर रीडायरेक्ट कर रहे हैं। यदि किसी भी कारण से कोई एसएसएल नहीं है (कोई प्रमाण या बुरा प्रमाण नहीं है) तो आप रिकर्सिव लूप में जाएंगे। एक बेहतर विकल्प एक त्रुटि पृष्ठ पर रीडायरेक्ट करना होगा क्योंकि उपयोगकर्ता को सुरक्षित-केवल साइट/पृष्ठ दर्ज नहीं करना चाहिए जब तक कि कोड गलत तरीके से ऐसा न करे या वे URL से गड़बड़ कर रहे हों। –

+1

यह चेतावनी के साथ अच्छी तरह से काम करता है कि string.replace विधि "http: //" से "https: //" की सभी घटनाओं को बदल देगा, न केवल आरंभिक योजना। अर्थात। यह क्वेरी स्ट्रिंग पैरामीटर में हस्तक्षेप कर सकता है। –

+0

@Daniel यदि आपके पास:;) –

2

मैं बस एक अलग पृष्ठ के साथ सभी http urls को https पर रीडायरेक्ट करता हूं, या आपके आईआईएस कॉन्फ़िगरेशन पर "सुरक्षित चैनल की आवश्यकता है" विकल्प का उपयोग करता हूं, जो कोई गैर-https पृष्ठ तक पहुंचने का प्रयास करता है तो एक त्रुटि प्रदर्शित करेगा।

Here's अपनी साइट के https यूआरएल के लिए त्रुटि पृष्ठ पुनः निर्देशित करने के लिए एक गाइड के साथ एक साइट।

+0

वेब सर्वर स्तर पर ऐसा करना अब तक का सबसे अच्छा विकल्प है। यदि आप विशेष रूप से एसएसएल लोड संतुलन हार्डवेयर पेश करते हैं तो यह सड़क के नीचे अधिक लचीलापन प्रदान करता है। –

0
if(!String.Equals(Request.Url.Scheme, 
        "https", 
        StringComparison.OrdinalIgnoreCase)) { } 
+0

यह एक पठनीय संपत्ति है - http://msdn.microsoft.com/en-us/library/system.uri.scheme.aspx – Rich

+0

देखें, हां, यह है। स्ट्रिंग तुलना के लिए यह ठीक है, है ना? – abatishchev

+0

हाँ, और ऐसा लगता है कि आपका जवाब इसे प्रतिबिंबित करने के लिए संपादित किया गया है। मैंने केवल टिप्पणी की थी क्योंकि पहली पोस्ट ने ऐसा प्रतीत किया था कि आप प्रोग्राम को "http" से "https" में प्रोग्रामेटिक रूप से बदल सकते हैं। – Rich

0

आप केवल सुरक्षित कनेक्शन स्वीकार पोर्ट 80 के लिए एक अलग सेवा बनाने कि केवल HTTPS पर रीडायरेक्ट करना चाहते हैं। आदर्श रूप से, आप HTTP रीडायरेक्ट में अनुरोधित पथ को सुरक्षित रखेंगे।

आप बस ब्राउज़िंग के लिए HTTPS कनेक्शन के लिए प्रोत्साहित करना चाहते हैं (और रोबोट के बारे में परवाह नहीं है, उदाहरण के लिए), तो आपके पृष्ठों से जोड़ें:

<script type="text/javascript"> 
if(location.protocol=='http:') 
    location=location.toString().replace(/^http:/,'https:'); 
</script> 
1

मैं एक तो यह है कि HttpModule के साथ इस किया है आप प्रत्येक मास्टर पेज में कोड डालने के बारे में चिंता करने की ज़रूरत नहीं है (यदि आपके पास एक से अधिक हैं)। यह संस्करण लोकलहोस्ट के लिए रीडायरेक्ट को भी बंद कर देता है ताकि आपके पास अपनी मशीन पर एसएसएल न हो। मूल रूप से आप इस तरह एक नया HTTP मॉड्यूल बनाने:

Public Class RedirectToHttpsModule 
    Implements IHttpModule 

    Public Sub Dispose() Implements IHttpModule.Dispose 

    End Sub 

    Public Sub Init(ByVal context As HttpApplication) Implements IHttpModule.Init 
     AddHandler context.BeginRequest, AddressOf context_BeginRequest 
    End Sub 

    Private Sub context_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
     Dim application As HttpApplication = TryCast(sender, HttpApplication) 
     If Not application.Request.IsSecureConnection And Not application.Request.IsLocal Then 
      application.Response.Redirect(application.Request.Url.ToString().Replace(application.Request.Url.Scheme, "https")) 
     End If 
    End Sub 

End Class 

तुम भी HttpModule के लिए web.config में उचित पंक्ति जोड़ने के लिए:

<httpModules> 
     <add type="RedirectToHttpsModule" name="RedirectToHttpsModule" /> 
</httpModules> 
2

निम्नलिखित जोश Stodolas जवाब पर बनाता है (IsSecureConnection) लेकिन स्ट्रिंग को प्रतिस्थापित करने के बजाय योजना को https में बदलने के लिए UriBuilder का उपयोग करता है। इस दृष्टिकोण का लाभ यह है कि यह यूआरएल में "http" की सभी घटनाओं को "https" में नहीं बदलेगा।

if (!Request.IsSecureConnection) 
{ 
    UriBuilder newUri = new UriBuilder(Request.Url); 
    newUri.Scheme = Uri.UriSchemeHttps; 
    Response.Redirect(newUri.Uri.AbsoluteUri); 
} 
संबंधित मुद्दे