c# world একটি সম্পূর্ণ সাইট জন্য https জোরপূর্বক asp.net সেরা উপায়?




simple program in asp net (12)

যদি এসএসএস সাপোর্টটি আপনার সাইটে কনফিগারযোগ্য হয় না (যেমন। Https চালু / বন্ধ করতে সক্ষম হওয়া উচিত) - আপনি যে কোনও কন্ট্রোলার / কন্ট্রোলার অ্যাক্টিভেটের জন্য [প্রয়োজনীয় হ্যাটহেটস] বৈশিষ্ট্যটি ব্যবহার করতে পারেন যা আপনি সুরক্ষিত করতে চান।

প্রায় 6 মাস আগে আমি এমন একটি সাইট চালু করেছি যেখানে প্রত্যেক অনুরোধ https থেকে বেশি হতে হবে। একমাত্র উপায়টি আমি নিশ্চিত করতে পারতাম যে পৃষ্ঠাটির প্রতিটি অনুরোধটি https এর চেয়ে বেশি ছিল পৃষ্ঠা লোড ইভেন্টে এটি পরীক্ষা করা। যদি অনুরোধ HTTP এর উপর না হয় তবে আমি প্রতিক্রিয়া। প্রত্যক্ষ (" https://example.com ")

একটি ভাল উপায় আছে - আদর্শভাবে web.config কিছু সেটিং?


ব্রাউজারে "স্ট্রিক-ট্রান্সপোর্ট-সিকিউরিটি" HSTS ফেরত দিয়ে আপনি যেটি করতে পারেন তা হল HSTS ব্যবহার করুন। ব্রাউজারকে (এবং বর্তমানে এটি প্রাথমিকভাবে ক্রোম এবং ফায়ারফক্স যা আছে) সমর্থন করতে হবে, তবে এর মানে হল যে একবার সেট করা হলে ব্রাউজারটি HTTP- এ সাইটটিতে অনুরোধ করবে না এবং তাদের পরিবর্তে তাদের HTTPS অনুরোধগুলিতে অনুবাদ করবে । এইচটিএমএল থেকে একটি পুনঃনির্দেশ সঙ্গে সমন্বয় এই চেষ্টা করুন:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
  switch (Request.Url.Scheme)
  {
    case "https":
      Response.AddHeader("Strict-Transport-Security", "max-age=300");
      break;
    case "http":
      var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
      Response.Status = "301 Moved Permanently";
      Response.AddHeader("Location", path);
      break;
  }
}

এইচএসএসএসএস সচেতন নয় এমন ব্রাউজারগুলি হ্যান্ডেলকে উপেক্ষা করবে তবে স্যুইচ স্টেটমেন্ট দ্বারা ধরা হবে এবং HTTPS এ পাঠানো হবে।


আমি আমার দুটি সেন্ট নিক্ষেপ করতে যাচ্ছি। যদি আপনার আইআইএস সার্ভারের পাশে অ্যাক্সেস থাকে, তবে আপনি প্রোটোকল বাইন্ডিং ব্যবহার করে HTTPS প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনার ব্লা নামক একটি ওয়েবসাইট আছে। আইআইএসে আপনি দুটি সাইট সেট আপ করবেন: Blah , এবং Blah (পুনঃনির্দেশ)Blah এর জন্য শুধুমাত্র HTTPS বাইন্ডিং কনফিগার করুন (এবং যদি আপনার প্রয়োজন হয় তবে FTP , এটি একটি নিরাপদ সংযোগের পাশাপাশি জোর করে নিশ্চিত করুন)। Blah (পুনঃনির্দেশ) শুধুমাত্র HTTP বাইন্ডিং কনফিগার করুন। অবশেষে, Blah (পুনঃনির্দেশ) জন্য HTTP পুনঃনির্দেশ বিভাগে সঠিকভাবে গন্তব্য সক্ষম সহ 301 টি পুনঃনির্দেশ পুনঃনির্দেশ https://blah.com সেট করা নিশ্চিত করুন। আইআইএস-এ প্রতিটি সাইট এটির নিজস্ব রুট ফোল্ডারে ইঙ্গিত করে অন্যথায় Web.config সমস্ত স্ক্রু আপ হয়ে যাবে। এছাড়াও আপনার HTTPSed সাইটে HSTS কনফিগার করা আছে তা নিশ্চিত করুন যাতে ব্রাউজারের পরবর্তী অনুরোধ সবসময় HTTPS এ বাধ্য হয় এবং কোনও পুনঃনির্দেশ ঘটে না।


আমি মাঝে মাঝে ভাল অনুশীলন করার জন্য ব্যয় করেছিলাম যা জ্ঞান করে এবং আমার জন্য নিখুঁত কাজটি অনুসরণ করে। আমি আশা করি এটি আপনাকে কিছুক্ষন বাঁচাবে।

কনফিগ ফাইল ব্যবহার করে (উদাহরণস্বরূপ একটি ASP.NET ওয়েবসাইট) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and-higher/

অথবা আপনার নিজের সার্ভারে https://www.sslshopper.com/iis7-redirect-http-to-https.html

[ছোট উত্তর] কেবল নীচের কোড ভিতরে যায়

<system.webServer> 
 <rewrite>
     <rules>
       <rule name="HTTP/S to HTTPS Redirect" enabled="true" 
           stopProcessing="true">
       <match url="(.*)" />
        <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
        redirectType="Permanent" />
        </rule>
       </rules>
 </rewrite>

আইআইএস 10 (উইন্ডোজ 10 এবং সার্ভার 2016), 1709 এর সংস্করণ থেকে, একটি ওয়েবসাইটের জন্য এইচএসটিএস সক্ষম করার জন্য একটি নতুন, সহজ বিকল্প রয়েছে।

মাইক্রোসফট here নতুন পদ্ধতির সুবিধার বর্ণনা দিয়েছেন এবং প্রোগ্রামটির পরিবর্তনটি কিভাবে বাস্তবায়ন করবেন বা সরাসরি ApplicationHost.config ফাইলটি সম্পাদনা করতে বিভিন্ন ধরণের উদাহরণ সরবরাহ করবেন (যা web.config এর মতো কিন্তু আইআইএস স্তরের উপর পরিচালিত হয়, পৃথক সাইটের স্তর পরিবর্তে )। ApplicationHost.config C: \ Windows \ System32 \ inetsrv \ config এ পাওয়া যাবে।

লিঙ্ক লট এড়ানোর জন্য আমি এখানে দুটি উদাহরণ পদ্ধতি রূপরেখা করেছি।

পদ্ধতি 1 - সরাসরি <site> ট্যাগগুলির মধ্যে ApplicationHost.config ফাইলটি সম্পাদনা করুন, এই লাইন যুক্ত করুন:

<hsts enabled="true" max-age="31536000" includeSubDomains="true" redirectHttpToHttps="true" />

পদ্ধতি 2 - কমান্ড লাইন: একটি elevated কমান্ড প্রম্পট থেকে নিম্নলিখিত সঞ্চালন করুন (অর্থাত সিএমডি উপর ডান মাউস এবং প্রশাসক হিসাবে চালানো)। আইআইএস ব্যবস্থাপক হিসাবে প্রদর্শিত হিসাবে আপনার সাইটের নামের সাথে Contoso Swap মনে রাখবেন।

c:
cd C:\WINDOWS\system32\inetsrv\
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.enabled:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.max-age:31536000" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.includeSubDomains:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.redirectHttpToHttps:True" /commit:apphost

আপনি যদি হোস্টেড পরিবেশে থাকেন তবে যেখানে আপনার সীমিত অ্যাক্সেস থাকে তবে অন্যান্য নিবন্ধগুলি Microsoft এ সেই নিবন্ধগুলির মধ্যে আরও ভাল বিকল্প হতে পারে।

মনে রাখবেন IIS10 সংস্করণ 1709 এখন উইন্ডোজ 10 এ উপলব্ধ রয়েছে, তবে উইন্ডোজ সার্ভার 2016 এর জন্য এটি একটি ভিন্ন রিলিজ ট্র্যাকে রয়েছে এবং প্যাচ বা পরিষেবা প্যাক হিসাবে মুক্তি পাবে না। 1709 সম্পর্কে বিস্তারিত জানার জন্য here দেখুন।


আপনি যদি ASP.NET কোর ব্যবহার করেন তবে আপনি Nidget প্যাকেজটি SaidOut.AspNetCore.HttpsWithStrictTransportSecurity ব্যবহার করে দেখতে পারেন।

তারপর আপনি শুধুমাত্র যোগ করতে হবে

app.UseHttpsWithHsts(HttpsMode.AllowedRedirectForGet, configureRoutes: routeAction);

এটি HTTPS স্কিম ব্যবহার করে তৈরি সমস্ত অনুরোধে HTTP StrictTransportSecurity হেডার যোগ করবে।

উদাহরণ কোড এবং ডকুমেন্টেশন https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code


@ জো উপরে, "এটি আমাকে একটি পুনঃনির্দেশ লুপ দিচ্ছে। আমি কোডটি যোগ করার আগে এটি জরিমানা হয়েছে। কোন পরামর্শ? - জো নভ 8 '11 এ 4:13"

এটি আমার সাথেও ঘটছে এবং আমি যা বিশ্বাস করছিলাম তা হচ্ছে ওয়েব সার্ভারের সামনে SSL অনুরোধটি বন্ধ করার একটি লোড ব্যালান্সার ছিল। সুতরাং, আমার ওয়েব সাইট সর্বদা "http" অনুরোধটি চিন্তা করছিল, এমনকি মূল ব্রাউজারটি এটি "https" হতে অনুরোধ করলেও।

আমি এটি একটি বিট হ্যাকি স্বীকার, কিন্তু আমার জন্য কি কাজ ছিল একটি "JustRedirected" সম্পত্তি বাস্তবায়ন যে আমি ব্যক্তি খুঁজে বের করতে পারে লিভারেজ ইতিমধ্যে একবার পুনঃনির্দেশিত করা হয়। সুতরাং, আমি নির্দিষ্ট শর্তগুলির জন্য পরীক্ষা করি যা পুনঃনির্দেশের নিশ্চয়তা দেয় এবং যদি সেগুলি পূরণ হয় তবে আমি পুনঃনির্দেশনার আগে এই সম্পত্তি (সেশনে সঞ্চিত মান) সেট করি। পুনঃনির্দেশনের জন্য http / https শর্তগুলি দ্বিতীয় বার পূরণ করা হলেও, আমি পুনঃনির্দেশকরণ লজিককে বাইপাস করি এবং "JustRedirected" সেশন মানটি মিথ্যাতে পুনরায় সেট করি। আপনি আপনার নিজের শর্তাধীন পরীক্ষা যুক্তি প্রয়োজন হবে, কিন্তু এখানে সম্পত্তি একটি সহজ বাস্তবায়ন:

    public bool JustRedirected
    {
        get
        {
            if (Session[RosadaConst.JUSTREDIRECTED] == null)
                return false;

            return (bool)Session[RosadaConst.JUSTREDIRECTED];
        }
        set
        {
            Session[RosadaConst.JUSTREDIRECTED] = value;
        }
    }

IIS7 মডিউল আপনাকে পুনঃনির্দেশিত করতে দেবে।

    <rewrite>
        <rules>
            <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
                <match url="(.*)"/>
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$"/>
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
            </rule>
        </rules>
    </rewrite>

আপনি কি করতে হবে:

1) ওয়েব.config ভিতরে একটি কী যোগ করুন, নীচের মত উত্পাদন বা মঞ্চ সার্ভারের উপর নির্ভর করে

<add key="HttpsServer" value="stage"/>
             or
<add key="HttpsServer" value="prod"/>

2) আপনার Global.asax ফাইলের ভিতরে নীচের পদ্ধতি যোগ করুন।

void Application_BeginRequest(Object sender, EventArgs e)
{
    //if (ConfigurationManager.AppSettings["HttpsServer"].ToString() == "prod")
    if (ConfigurationManager.AppSettings["HttpsServer"].ToString() == "stage")
    {
        if (!HttpContext.Current.Request.IsSecureConnection)
        {
            if (!Request.Url.GetLeftPart(UriPartial.Authority).Contains("www"))
            {
                HttpContext.Current.Response.Redirect(
                    Request.Url.GetLeftPart(UriPartial.Authority).Replace("http://", "https://www."), true);
            }
            else
            {
                HttpContext.Current.Response.Redirect(
                    Request.Url.GetLeftPart(UriPartial.Authority).Replace("http://", "https://"), true);
            }
        }
    }
}

এটি ওয়েব ব্যালেন্সের জন্য আপনার ব্যালান্সারের ব্র্যান্ডের উপর নির্ভর করে, আপনাকে http হেডার X-WebMux-SSL-termination: true ট্রাফিকটি এসএসএল ছিল তা বোঝার জন্য X-WebMux-SSL-termination: true । এখানে বিস্তারিত বিবরণ: http://www.cainetworks.com/support/redirect2ssl.html


HSTS ব্যবহার করুন

থেকে http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                        redirectType="Permanent" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                    <match serverVariable="RESPONSE_Strict_Transport_Security"
                        pattern=".*" />
                    <conditions>
                        <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                    </conditions>
                    <action type="Rewrite" value="max-age=31536000" />
                </rule>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

আসল উত্তর (উপরে ডিসেম্বর 4 ডিসেম্বর 2015)

মূলত

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false))
   {
    Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"]
+   HttpContext.Current.Request.RawUrl);
   }
}

যে global.asax.cs যেতে হবে (অথবা global.asax.vb)

আমি web.config এ এটি নির্দিষ্ট করার উপায় সম্পর্কে জানি না


@ ট্রায় হান্ট এর উপর ভিত্তি করে এটি একটি পূর্ণাঙ্গ উত্তর। WebApplication আপনার ওয়েব WebApplication ক্লাসে এই ফাংশনটি যুক্ত করুন:

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Allow https pages in debugging
        if (Request.IsLocal)
        {
            if (Request.Url.Scheme == "http")
            {
                int localSslPort = 44362; // Your local IIS port for HTTPS

                var path = "https://" + Request.Url.Host + ":" + localSslPort + Request.Url.PathAndQuery;

                Response.Status = "301 Moved Permanently";
                Response.AddHeader("Location", path);
            }
        }
        else
        {
            switch (Request.Url.Scheme)
            {
                case "https":
                    Response.AddHeader("Strict-Transport-Security", "max-age=31536000");
                    break;
                case "http":
                    var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
                    Response.Status = "301 Moved Permanently";
                    Response.AddHeader("Location", path);
                    break;
            }
        }
    }

(আপনার স্থানীয় বিল্ডে SSL সক্ষম করতে এটি প্রজেক্টের জন্য প্রোপার্টি ডক এ সক্ষম করে)







https