কোনও সম্পূর্ণ সাইটের জন্য https জোর করার জন্য এএসপিএন-র সেরা উপায়?


192

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

আর কি আরও ভাল উপায় আছে - ওয়েবকনফাইগে আদর্শভাবে কিছু সেটিং?



উত্তর:


250

দয়া করে এইচএসটিএস (HTTP স্ট্রাইক ট্রান্সপোর্ট সিকিউরিটি) ব্যবহার করুন

http://www.hanselman.com/blog/HowToEnableHTTPS স্পট ট্রান্সপোর্টসিকিউরিটি HSTSInIIS7.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) এ যাবে

আমি এটি ওয়েবকনফাইগে নির্দিষ্ট করার কোনও উপায় জানি না


7
এটি কাজ করে, তবে এটি আমার পক্ষে বিপজ্জনক ছিল: আমি যখন এই কোডটি চালিয়ে ভিএস ২০১০ তে স্থানীয়ভাবে চালানোর চেষ্টা করেছি তখন আমার শুরু পৃষ্ঠাটি কখনই লোড হয়নি; পরিবর্তে, আমি সবেমাত্র একটি "এই ওয়েবপৃষ্ঠা উপলব্ধ নয়" বার্তাটি পেয়েছি। ঠিক করার জন্য, আমি ইউআরএলটিতে "লোকালহোস্ট" স্ট্রিং রয়েছে কিনা তা পরীক্ষা করার জন্য আমি দ্বিতীয় শর্ত যুক্ত করেছি: যদি তা না হয় তবে জোর করে https চাপুন।
এমজি 1075

3
এটি আমাকে একটি পুনর্নির্দেশ লুপ দিচ্ছে। আমি কোড যুক্ত করার আগে এটি ঠিকঠাক কাজ করেছিল। কোনও পরামর্শ?
জো

9
দয়া করে নোট করুন যে এটি কোনও কার্যকর সুরক্ষা সরবরাহ করে না। প্রকৃতপক্ষে, এটি কেবলমাত্র ইতিমধ্যে সুরক্ষিত ব্যবহারকারীদের কাছ থেকে সংযোগগুলি সুরক্ষিত করবে এবং আক্রমণকারীদের সুরক্ষিত করতে ব্যর্থ হবে (এটি কারণ একটি এমআইটিএম কেবল পুনঃনির্দেশটিকে পুরোপুরি বাদ দিতে পারে এবং আপনার "সুরক্ষিত" সাইটে সবকিছু ফরোয়ার্ড করতে পারে)। আইএমএইচও, ব্যবহারকারী এজেন্টদের পুনর্নির্দেশ করা কেবলমাত্র ভুডু সুরক্ষা বোধ করে এবং সুরক্ষার মাঝে মাঝে বিপজ্জনক মায়া দেয়। যাওয়ার একমাত্র উপায় হ'ল ব্যবহারকারী এজেন্টদের কেবল সুরক্ষিত সংস্থার জন্য অনুরোধ করার নির্দেশনা দেওয়া, যদি তা না করেন তবে তাদের পুনর্নির্দেশ করবেন না। এইচএসটিএস এটি করে - নীচে উত্তরগুলি দেখুন।
tne

2
এই উত্তরটিকে 'ক্ষতিকারক' হিসাবে বিবেচনা করা উচিত এবং এটি ব্যবহার করা উচিত নয়। উপরে @tne দ্বারা মন্তব্য অনুসারে।
রোসদী কাসিম

2
@ রসদীকাসিম 4 ডিসেম্বর '15 সম্পাদনার পরে এই উত্তরটি এখনও ক্ষতিকারক হিসাবে বিবেচনা করা উচিত?
অ্যান্ড্রু মর্টন

123

আপনি যা করতে পারেন তা হ'ল এইচএসটিএস যেটি ব্রাউজারে "স্ট্রাইক-ট্রান্সপোর্ট-সিকিউরিটি" ফিরিয়ে দিয়ে। ব্রাউজারটিকে এটিকে সমর্থন করতে হবে (এবং বর্তমানে এটি মূলত ক্রোম এবং ফায়ারফক্স যা করে) তবে এটির অর্থ এই যে একবার সেট হয়ে গেলে ব্রাউজারটি এইচটিটিপি-র মাধ্যমে সাইটগুলিতে অনুরোধ করবে না এবং পরিবর্তে তাদের জারি করার আগে এইচটিটিপিএস অনুরোধগুলিতে অনুবাদ করবে them । HTTP থেকে পুনর্নির্দেশের সাথে একত্রে এটি ব্যবহার করুন:

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

এইচএসটিএস সচেতন নয় এমন ব্রাউজারগুলি কেবল শিরোনামকে অগ্রাহ্য করবে তবে এখনও স্যুইচ বিবৃতিতে ধরা পড়বে এবং এইচটিটিপিএস-এ প্রেরণ করবে।


6
এইচএসটিএস শিরোনাম সম্পর্কে আগে কখনও শুনিনি, তবে বেশ দুর্দান্ত দেখাচ্ছে। এত ছোট সর্বোচ্চ বয়স মানের (5 মিনিট) ব্যবহার করার কোনও কারণ আছে কি? আপনি যে উইকিপিডিয়া নিবন্ধটির সাথে লিঙ্ক করেছেন এটি এটিকে একটি বড় মূল্যের (6-12 মাস) সেট করার পরামর্শ দেয়।
ডানা

5
+1 টি। ট্রয়ের ব্লগে এই অত্যন্ত নিবন্ধটি পরীক্ষা করে দেখুন যাতে কেবল পুনঃনির্দেশগুলি ব্যবহার করা কেন সুরক্ষা হ্রাস করতে পারে তার বিশদ অন্তর্ভুক্ত করে। ইঙ্গিত: এটি আপনাকে এসএসএল স্ট্রিপ সরঞ্জামটিতে অন্য জিনিসগুলির মধ্যে ঝুঁকির মধ্যে ফেলে দিতে পারে। troyhunt.com/2011/11/…
অরান ডেনিসন

3
NWebsec পরীক্ষা করাও মূল্যবান , যা এটিকে (এবং আরও অনেক বেশি) সহজ করে তোলে।
টাইসন টি।

16
আপনি স্যুইচটি মোড়ানো করতে চাইবেন if(!Request.IsLocal)যাতে এটি ডিবাগিং ভাঙবে না।
জাস্টিন জে স্টার্ক

1
ভাল উত্তর. একটি সূক্ষ্মতা - এইচটিপিপি শিরোনামগুলির জন্য ("স্ট্রাইক-ট্রান্সপোর্ট-সিকিউরিটি") এনউইউবেসেকের মতো লাইব্রেরি ব্যবহার করা ভাল, কারণ এখানে একাধিক বিকল্প রয়েছে যা কনফিগারেশনের এক জায়গায় কেন্দ্রীভূত হয়ে বরং এখানে এবং সেখানে ছড়িয়ে পড়ে।
অগ্নিয়ান দিমিত্রভ

89

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

    <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>

12
এছাড়াও, আইআইএস 7.0 এর জন্য, আপনাকে url পুনর্লিখন মডিউল 2.0 ইনস্টল করতে হবে
ক্রিস

আমি এই লিঙ্কটি কেবলমাত্র https অনুরোধগুলি গ্রহণ করার জন্য কোনও নির্দিষ্ট পৃষ্ঠা তৈরি করতে সহজ এবং সহায়ক বলে মনে করেছি - সমর্থন.microsoft.com/kb/239875
মানিক অরোরা

21

যারা এএসপি.এনইটি এমভিসি ব্যবহার করছেন তাদের জন্য। পুরো সাইটের উপর এইচটিটিপিএসের উপর এসএসএল / টিএলএসকে দুটি উপায় দিয়ে জোর করতে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

কঠিন পথে

1 - গ্লোবাল ফিল্টারগুলিতে আবশ্যক এইচটিপিএসএট্রিবিউট যুক্ত করুন:

GlobalFilters.Filters.Add(new RequireHttpsAttribute());

2 - এন্টি-ফোরজি টোকেনকে এসএসএল / টিএলএস ব্যবহার করতে বাধ্য করুন:

AntiForgeryConfig.RequireSsl = true;

3 - Web.config ফাইল পরিবর্তন করে ডিফল্টরূপে এইচটিটিপিএস প্রয়োজন কুকিজের প্রয়োজন:

<system.web>
    <httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>

4 - NWebSec.Owen NuGet প্যাকেজটি ব্যবহার করুন এবং সাইট জুড়ে কঠোর পরিবহন সুরক্ষা সক্ষম করতে নিম্নলিখিত কোডের লাইন যুক্ত করুন। নীচে প্রিলোড নির্দেশিকা যুক্ত করতে ভুলবেন না এবং আপনার সাইটটিকে এইচএসটিএস প্রিলোড সাইটে জমা দিন । অধিক তথ্যএখানে এবং এখানে । মনে রাখবেন যে আপনি যদি ওউইউন ব্যবহার না করেন তবে একটি ওয়েবকনফিগ পদ্ধতি রয়েছে যা আপনি এনওয়েবসেক সাইটে পড়তে পারেন ।

// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 30).Preload());

5 - NWebSec.Owin NuGet প্যাকেজটি ব্যবহার করুন এবং সাইট জুড়ে পাবলিক কী পিনিং (এইচপিকেপি) সক্ষম করতে নিম্নলিখিত কোডের লাইন যুক্ত করুন। অধিক তথ্যএখানে এবং এখানে

// app is your OWIN IAppBuilder app in Startup.cs
app.UseHpkp(options => options
    .Sha256Pins(
        "Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
        "Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
    .MaxAge(days: 30));

6 - যে কোনও ইউআরএলের ব্যবহৃততে https টি স্কিম অন্তর্ভুক্ত করুন। আপনি কিছু ব্রাউজারে স্কিমটি অনুকরণ করলে সামগ্রী সুরক্ষা নীতি (সিএসপি) এইচটিটিপি শিরোনাম এবং সাব্রোসোর্স ইন্টিগ্রিটি (এসআরআই) ভাল খেলবে না। এইচটিটিপিএস সম্পর্কে সুস্পষ্ট হওয়া ভাল। যেমন

<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"></script>

সহজ উপায়

এগুলি এবং আরও অনেক কিছু অন্তর্নির্মিত একটি প্রকল্প তৈরি করতে ASP.NET MVC বয়লারপ্লেট ভিজ্যুয়াল স্টুডিও প্রকল্প টেম্পলেটটি ব্যবহার করুন G আপনি গিটহাবের কোডটিও দেখতে পারেন ।


3
এছাড়াও যদি ব্যবহার করে থাকেন তবে <authentication mode="Forms">আপনার অবশ্যই ভিতরে থাকতে হবে<forms requireSSL="true">
প্লুটো

1
@ মুহাম্মাদ-রেহান-সাeedদ আমি এমভিসি 5 বয়লারপ্লেট ব্যবহার করছি তবে সাইটটি প্রোডাকশন সার্ভারে স্বয়ংক্রিয়ভাবে https https তে পুনঃনির্দেশিত করে না এটি কেবল লোকালহস্টে এমন কিছু আছে যা আমি অনুপস্থিত রয়েছি?
Diin

এই প্রশ্নটি জিজ্ঞাসা করার জন্য এটি সঠিক ফোরাম নয়। গিটহাব সাইটে একটি সমস্যা পোস্ট করুন। RequireHttpsAttributeপুনর্নির্দেশ আছে। যতক্ষণ না আপনার কাছে এটি ঠিক থাকা উচিত।
মুহাম্মদ রেহান সা Saeedদ

@ মুহম্মেদরহানসায়ীদ, আপনার উত্তরটি ভালবাসুন। তবে ... আমি কীভাবে মেককার্ট দিয়ে তৈরি শংসাপত্রের SHA256 হ্যাশ পাব? আমার যা কিছু আছে তা হ'ল একটি SHA-1 থাম্বপ্রিন্ট ... আপনি কি জানেন?
ডায়ানা

1
@ ডায়ানা এই লিঙ্কটি আপনাকে কীভাবে তা দেখায়।
মুহাম্মদ রেহান সা Saeedদ

13

আপনি যদি কোনও কারণেই আইআইএসে সেট আপ করতে অক্ষম হন তবে আমি এমন একটি এইচটিটিপি মডিউল তৈরি করব যা আপনাকে পুনঃনির্দেশিত করে:

using System;
using System.Web;

namespace HttpsOnly
{
    /// <summary>
    /// Redirects the Request to HTTPS if it comes in on an insecure channel.
    /// </summary>
    public class HttpsOnlyModule : IHttpModule
    {
        public void Init(HttpApplication app)
        {
            // Note we cannot trust IsSecureConnection when 
            // in a webfarm, because usually only the load balancer 
            // will come in on a secure port the request will be then 
            // internally redirected to local machine on a specified port.

            // Move this to a config file, if your behind a farm, 
            // set this to the local port used internally.
            int specialPort = 443;

            if (!app.Context.Request.IsSecureConnection 
               || app.Context.Request.Url.Port != specialPort)
            {
               app.Context.Response.Redirect("https://" 
                  + app.Context.Request.ServerVariables["HTTP_HOST"] 
                  + app.Context.Request.RawUrl);    
            }
        }

        public void Dispose()
        {
            // Needed for IHttpModule
        }
    }
}

তারপরে এটি কেবল একটি ডিএলএল-এ সংকলন করুন, আপনার প্রকল্পের রেফারেন্স হিসাবে এটি যুক্ত করুন এবং এটি ওয়েবকনফাইগে রাখুন:

 <httpModules>
      <add name="HttpsOnlyModule" type="HttpsOnly.HttpsOnlyModule, HttpsOnly" />
 </httpModules>

এটি কেবল গ্লোবাল.এক্সএক্সে আটকে থাকার চেয়ে আরও জড়িত বলে মনে হচ্ছে - কেবল কৌতূহলী, কোনও সুবিধা আছে কি?
ব্রায়ান ম্যাকেয়ে

1
সুবিধাটি হ'ল, যখন আপনি এটি ব্যবহার করতে চান না, কেবল আপনার ওয়েবকনফাইগের মডিউলটি মন্তব্য করুন। এই সমাধান হয় যেহেতু অন্যান্য নয়, কনফিগারযোগ্য।
বব ইয়েক্সলে

2
আমি একটু বিভ্রান্ত আমি পদ্ধতির মতো app.BeginRequest += new OnBeginRequest;এবং বর্তমান পদ্ধতিতে যা রয়েছে তাতে কিছু রয়েছে বলে আশা করব expected আপনি কি নিশ্চিত যে এই মডিউলটি প্রত্যাশার মতো কাজ করে? InitOnBeginRequestInit
জাকব Šturc

এটা কাজ করে না. আপনার অনবিগেনরয়েস্ট ইভেন্ট ইত্যাদি যুক্ত করার দরকার নেই, তবে এটি কার্যকর হয়।
SnAzBaZ

আমি এই ত্রুটিযুক্ত কোডটি সম্পাদনা করব, তবে এটিকে সুরক্ষিত করতে আপনাকে এইচএসটিএসও ব্যবহার করতে হবে। কেবল ট্রয় হান্টের উত্তরের সাথে যান এবং এটিকে একটি মডিউল বানান; দেখতে support.microsoft.com/en-us/kb/307996 (একটি পুরাতন কিন্তু গুডি)।
মার্ক এল।

4

আপনার যা করা দরকার তা হ'ল:

1) নীচের মত উত্পাদন বা স্টেজ সার্ভারের উপর নির্ভর করে ওয়েবকনফিগের অভ্যন্তরে একটি কী যুক্ত করুন

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

3

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


2

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


2

উপরের জো-এর জন্য, "এটি আমাকে পুনঃনির্দেশ লুপ দিচ্ছে I কোডটি যুক্ত করার আগে এটি ভাল কাজ করেছিল Any কোনও পরামর্শ? - জো 8 ই নভেম্বর '11 এ 4:13 এ"

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

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

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

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

2

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


2

এটি @ ট্রয় হান্টের উপর ভিত্তি করে একটি পূর্ণ উত্তর। আপনার WebApplicationক্লাসে এই ফাংশনটি এতে যুক্ত করুন Global.asax.cs:

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

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


1

-> সরকারী শ্রেণীর হোমকন্ট্রোলার শীর্ষে কেবল [প্রয়োজনীয়তা HTTP] যুক্ত করুন: নিয়ামক।

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

যা আপনার সম্পূর্ণ অ্যাপ্লিকেশনটিকে এইচটিটিপিএসে বাধ্য করে।


আমি বিশ্বাস করি না যে এটি ওয়েবফোর্মে বা ওয়েবএপিআই দিয়ে নির্মিত কোনও এপিআই ব্যবহার করে যে কোনও পৃষ্ঠার জন্য কাজ করবে। এটি কেবল এমভিসি নিয়ন্ত্রণকারীদের কভার করবে।
মার্ক এল।

1

আমি কিছুটা ভাল অনুশীলনের সন্ধানে কাটিয়েছি যা বোধগম্য হয় এবং নিম্নলিখিতটি আমার জন্য নিখুঁতভাবে কাজ করে। আমি আশা করি এটি আপনাকে কিছুটা সময় সাশ্রয় দেবে।

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

বা আপনার নিজস্ব সার্ভারে 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>

1

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

মাইক্রোসফ্ট এখানে নতুন পদ্ধতির সুবিধাগুলি বর্ণনা করে এবং কীভাবে প্রোগ্রামটিমেটিকভাবে পরিবর্তনটি প্রয়োগ করতে হয় বা অ্যাপ্লিকেশনহোস্টকনফিগ ফাইলটি সরাসরি সম্পাদনা করে (যা ওয়েবকনফিগের মতো তবে আইআইএস স্তরে পৃথক সাইট স্তরের পরিবর্তে পরিচালিত হয়) এর বিভিন্ন উদাহরণ প্রদান করে Microsoft )। অ্যাপ্লিকেশনহস্ট.কনফিগ সি: \ উইন্ডোজ \ সিস্টেম 32 \ ইনটসরভ \ কনফিগারেশনে পাওয়া যাবে।

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

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

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

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

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

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

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


0

আপনি যদি এএসপি.নেট কোর ব্যবহার করছেন তবে আপনি স্যুইডআউট.এএসপনেটকোর.হট্টপস উইথস্ট্রিক্ট ট্রান্সপোর্টসিকিউরিটি নাগেট প্যাকেজটি ব্যবহার করে দেখতে পারেন।

তারপরে আপনাকে কেবল যুক্ত করতে হবে

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

এটি https স্কিম ব্যবহার করে করা সমস্ত অনুরোধে HTTP স্ট্রাইকট্রান্সপোর্টসিকিউরিটি শিরোনামও যুক্ত করবে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.