c# - world - simple program in asp net




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

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

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


-> জনসাধারণের ক্লাস হোম কন্ট্রোলারের উপরে [RequHttps] যোগ করুন: কন্ট্রোলার।

-> এবং গ্লোবাল ফিল্টার যুক্ত করুন। ফিল্টার যুক্ত করুন (নতুন প্রয়োজনীয় হিটসেটস্যাট্রিবিউট ()); Global.asax.cs ফাইলে 'সুরক্ষিত অকার্যকর Application_Start ()' পদ্ধতিতে।

যা HTTPS আপনার সম্পূর্ণ আবেদন বাহিনী।


@ জো উপরে, "এটি আমাকে একটি পুনঃনির্দেশ লুপ দিচ্ছে। আমি কোডটি যোগ করার আগে এটি জরিমানা হয়েছে। কোন পরামর্শ? - জো নভ 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;
        }
    }

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 এ এটি নির্দিষ্ট করার উপায় সম্পর্কে জানি না


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);
            }
        }
    }
}

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

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

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

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

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


আমি আমার দুটি সেন্ট নিক্ষেপ করতে যাচ্ছি। যদি আপনার আইআইএস সার্ভারের পাশে অ্যাক্সেস থাকে, তবে আপনি প্রোটোকল বাইন্ডিং ব্যবহার করে 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>

ব্রাউজারে "স্ট্রিক-ট্রান্সপোর্ট-সিকিউরিটি" 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 চালু / বন্ধ করতে সক্ষম হওয়া উচিত) - আপনি যে কোনও কন্ট্রোলার / কন্ট্রোলার অ্যাক্টিভেটের জন্য [প্রয়োজনীয় হ্যাটহেটস] বৈশিষ্ট্যটি ব্যবহার করতে পারেন যা আপনি সুরক্ষিত করতে চান।







https