HTTP বেসিক প্রমাণীকরণের জন্য আমার কোন এনকোডিং ব্যবহার করা উচিত?


87

আরএফসি 2617 বেসউজটিতে ব্যবহারকারীর নাম এবং পাসওয়ার্ড এনকোড করতে বলেছে তবে বেস 64 এর অ্যালগরিদমে ইনপুট দেওয়ার জন্য অক্টেট তৈরি করার সময় কোন অক্ষরটি এনকোডিং করতে হবে তা বলবেন না।

আমার কি ইউএস-এএসসিআইআই বা ইউটিএফ 8 ধরে নেওয়া উচিত? বা কেউ ইতিমধ্যে কোথাও এই প্রশ্ন নিষ্পত্তি করেছে?


উত্তর:


74

মূল বৈশিষ্ট - আরএফসি 2617

আরএফসি 2617 "ISO-8859-1" বা "অপরিজ্ঞাত" হিসাবে পড়া যেতে পারে। তোমার পছন্দ. এটি জানা যায় যে অনেক সার্ভারগুলি আইএসও -8859-1 ব্যবহার করে (এটি পছন্দ করুন বা না) এবং আপনি অন্য কোনও কিছু পাঠালে ব্যর্থ হয়ে যায়। সুতরাং সম্ভবত একমাত্র নিরাপদ পছন্দ হ'ল এএসসিআইআই-তে আটকে থাকা।

আরও তথ্যের জন্য এবং পরিস্থিতি সমাধানের প্রস্তাবের জন্য, "এইচটিটিপি বেসিক প্রমাণীকরণের জন্য একটি এনকোডিং প্যারামিটার" খসড়াটি দেখুন (এটি আরএফসি 7617 এর ভিত্তি তৈরি করেছিল) formed

নতুন - আরএফসি 7617

2015 সাল থেকে আছে বোঝায় যা RFC 7617 , যা পুরাতন জন্য RFC থেকে বোঝায় যা RFC 2617. বিপরীতে obsoletes, নতুন বোঝায় যা RFC স্পষ্টভাবে চরিত্র ব্যবহারকারী নাম এবং পাসওয়ার্ড জন্য ব্যবহার করা হবে এনকোডিং সংজ্ঞায়িত করে।

  • ডিফল্ট এনকোডিং এখনও অপরিজ্ঞাত। কেবলমাত্র ইউএস-এএসসিআইআইয়ের সাথে সামঞ্জস্যপূর্ণ হওয়া প্রয়োজন (যার অর্থ এটি ইউএসএফ -8 এর মতো ASCII বাইটসকে ASCII বাইটস হিসাবে মানচিত্র করে)।
  • সার্ভার charset="UTF-8"challenge চ্ছিকভাবে তার চ্যালেঞ্জটিতে একটি অতিরিক্ত প্রমাণীকরণের প্যারামিটারটি প্রেরণ করতে পারে, এর মতো:
    WWW-Authenticate: Basic realm="myChosenRealm", charset="UTF-8"
    এটি ঘোষণা করে যে সার্ভারটি ব্যবহারকারীর নাম / পাসওয়ার্ডে নন-এসসিআইআই অক্ষর গ্রহণ করবে এবং এটি ইউটিএফ -8 এ এনকোড হওয়ার প্রত্যাশা করে (বিশেষত নর্মালাইজেশন ফর্ম সি) । মনে রাখবেন যে কেবল ইউটিএফ -8 অনুমোদিত।

সম্পূর্ণ সংস্করণ:

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

ব্রাউজার সমর্থন

2018 হিসাবে, আধুনিক ব্যবহারকারীরা সাধারণত ইউটিএফ -8 এ ডিফল্ট হয়ে যায় যদি কোনও ব্যবহারকারী ব্যবহারকারীর নাম বা পাসওয়ার্ডের জন্য অ-এসসিআইআই অক্ষর প্রবেশ করে (এমনকি সার্ভারটি charsetপ্যারামিটারটি ব্যবহার না করে )।

  • ক্রোমও ইউটিএফ -8 ব্যবহার করে
  • ইন্টারনেট এক্সপ্লোরার ইউটিএফ -8 ব্যবহার করে না ( সমস্যা # 11879588 )
  • ফায়ারফক্স বর্তমানে v59 ( বাগ 1419658 ) এর জন্য পরিকল্পনা করা পরিবর্তনের সাথে পরীক্ষা করছে

রাজ্য

রিয়েলম প্যারামিটারটি কেবল আরএসএফআই 7617 তে কেবলমাত্র ASCII অক্ষরকে সমর্থন করে।


ধন্যবাদ জুলিয়ান আমি সেই প্রস্তাবে চলে এসেছি তবে মনে হয় মেয়াদ উত্তীর্ণ হয়ে গেছে এবং আর কোথাও যায় নি। খুব খারাপ :-(।
ডাবিস ভান্ডারমির

4
আপনার উত্তর অবশ্যই সেরা হতে হবে। আমি অবশ্যই এটি ASCII হিসাবে প্যারাফ্রেস করতে পারি, সম্ভবত আপনি ভাগ্যবান হলে আইএসও -8859-1।
ডাবিস ভান্ডারমির

এটা দেখে মনে হচ্ছে প্রস্তাব এর সর্বশেষ সংস্করণ 04 (কাকতালীয়ভাবে আজ প্রকাশিত হবে বলে মনে হয় যা) আগস্ট 1, 2012 তারিখে শেষ
Michiel ভ্যান Oosterhout

উত্তরটি অপ্রচলিত ছিল, কারণ এটি আরএফসি 76 76১17 এর উল্লেখ করেনি this আমি এটি অন্তর্ভুক্ত করার জন্য সম্পাদনা করেছি। জুলিয়ান: আশা করি আপনি কিছু মনে করবেন না।
সলেসকে

ওফস - আমি ঠিক বুঝতে পেরেছি আপনি আসলে আরএফসি 7617 এর লেখক Now এখন আমি সত্যিই আশা করি আমি কোনও কিছুকে ভুলভাবে সম্পাদনা করিনি।
sleske

41

সংক্ষিপ্ত উত্তর: আইসো -8859-1 যদি না এনকোডড-শব্দগুলি আরএফসি 2047 (এমআইএমআই) অনুসারে ব্যবহার না করা হয়।

দীর্ঘতর ব্যাখ্যা:

আরএফসি 2617, বিভাগ 2 (HTTP প্রমাণীকরণ) বেসিক-শংসাপত্রগুলির সংজ্ঞা দেয় :

basic-credentials = base64-user-pass
base64-user-pass  = <base64 encoding of user-pass, 
                     except not limited to 76 char/line>
user-pass         = userid ":" password
userid            = *<TEXT excluding ":">
password          = *TEXT

বিএনএফ-এ সংজ্ঞায়নের জন্য আরএফসি 2616 (HTTP 1.1) উল্লেখ না করে অনুমানটি পড়া উচিত নয় (উপরের মত):

এই স্পেসিফিকেশনটি HTTP / 1.1 স্পেসিফিকেশন 2 এর সহচর । এটি সেই দস্তাবেজের বর্ধিত বিএনএফ বিভাগটি 2.1 ব্যবহার করে এবং এই নথিতে সংজ্ঞায়িত নন-টার্মিনাল এবং এইচটিটিপি / 1.1 নির্দিষ্টকরণের অন্যান্য দিক উভয়ের উপর নির্ভর করে both

RFC2616, বিভাগ 2.1 সংজ্ঞায়িত টেক্সট (জোর খনি):

পাঠ্য বিধিটি কেবল বর্ণনামূলক ক্ষেত্র সামগ্রী এবং মানগুলির জন্য ব্যবহৃত হয় যা বার্তা পার্সার দ্বারা ব্যাখ্যা করার উদ্দেশ্যে নয়। * টেক্সট মায় এর শব্দগুলিতে কেবল আরএফসি 2047 এর নিয়ম অনুসারে এনকোডড হওয়াতে কেবল ISO-8859-1 ব্যতীত অক্ষর সেটগুলির অক্ষর রয়েছে ।

TEXT           = <any OCTET except CTLs, but including LWS>

সুতরাং এটি অবশ্যই আইসো -8859-1 হয় যদি না আপনি আরএফসি 2047 ( মাইমাই পিটি 3) নিয়ম অনুসারে অন্য কোনও এনকোডিং সনাক্ত করেন :

// Username: Mike
// Password T€ST
Mike:=?iso-8859-15?q?T€ST?=

এই ক্ষেত্রে শব্দটির ইউরো চিহ্নটি আইসো -8859-150xA4 অনুসারে এনকোড করা হবে । এটি আমার বোঝার বিষয় যে আপনার এই এনকোডড শব্দ ডিলিমিটারগুলির জন্য পরীক্ষা করা উচিত এবং তারপরে নির্দিষ্ট এনকোডিংয়ের উপর ভিত্তি করে শব্দগুলি ভিতরে ডিকোড করুন। আপনি যদি তা না করেন তবে আপনি ভাববেন যে পাসওয়ার্ডটি (নোটিশটি আইসো -8859-1 হিসাবে ব্যাখ্যা করার পরে ডিকোড হবে )।=?iso-8859-15?q?T¤ST?=0xA4¤

এটি আমার বোধগম্যতা, আমি এই আরএফসিগুলির চেয়ে সুস্পষ্ট নিশ্চিতকরণ খুঁজে পাচ্ছি না। এবং এর কিছুটিকে পরস্পরবিরোধী বলে মনে হচ্ছে। উদাহরণস্বরূপ, আরএফসি2047 এর 4 বর্ণিত লক্ষ্যগুলির মধ্যে একটি (এমআইএমআই, pt। 3) নতুন সংজ্ঞা দেওয়া:

বার্তাগুলির বিন্যাসের অনুমতি দেওয়ার জন্য ... অক্ষরটিতে পাঠ্য শিরোনামের তথ্য US-ASCII ব্যতীত অন্য কিছু সেট করে।

তবে তারপরে আরএফসি 2616 (এইচটিটিপি 1.1) টেক্সট নিয়মটি ব্যবহার করে একটি শিরোনামকে সংজ্ঞায়িত করে যা ডিফল্ট আইসো -8859-1। তার মানে কি এই শিরোনামের প্রতিটি শব্দ একটি এনকোডড শব্দ (অর্থাত্ =?...?=ফর্ম) হওয়া উচিত?

প্রাসঙ্গিক, কোনও বর্তমান ব্রাউজার এটি করে না। তারা utf-8 (ক্রোম, অপেরা), আইসো -8859-1 (সাফারি), সিস্টেম কোড পৃষ্ঠা (আইই) বা অন্য কিছু ব্যবহার করে (যেমন ফায়ারফক্সের ক্ষেত্রে utf-8 থেকে কেবলমাত্র সবচেয়ে গুরুত্বপূর্ণ বিট)।

সম্পাদনা: আমি ঠিক বুঝতে পেরেছি যে উত্তরটি সার্ভার-সাইড দৃষ্টিকোণ থেকে বিষয়টি আরও দেখায়।


আরএফসি 2047 এনকোডিং এই ক্ষেত্রে প্রয়োগ হয় না।
জুলিয়ান রেজচকে

@ জুলিয়ানআরস্কে ওয়েল, স্পেসটি পরিষ্কারভাবে জানিয়েছে "কেবল তখনই আরএফসি 2047 এর বিধি মোতাবেক এনকোড করা হয়েছে"। আমি বুঝতে পেরেছি যে আরএফসি2047-র বিধিগুলি HTTP শিরোনামগুলির জন্য প্রযোজ্য নয়, তবে উল্লেখটি উল্লেখ করা বেশ স্পষ্ট। আমি সত্যটি যুক্ত করেছি যে কোনও ব্রাউজার আসলে এটি করে না।
মিশিগেল ভ্যান ওস্টারস্টাউট

4
এইচটিটিপিবিস চশমা আরএফসি 2047 এর আর উল্লেখ করবে না।
জুলিয়ান রিশকে

খুব বিস্তারিত লেখার জন্য, ধন্যবাদ @ মিচিয়েলভান আস্টারহাউট!
টোস্টিমাগলস 21

5

আরএফসি একদিকে রেখে, স্প্রিং ফ্রেমওয়ার্কে , BasicAuthenticationFilterক্লাসে, ডিফল্টটি ইউটিএফ -8 হয়

আমি বিশ্বাস করি এই পছন্দটির কারণ হ'ল ইউটিএফ -8 সমস্ত সম্ভাব্য অক্ষর এনকোডিং করতে সক্ষম, যখন আইএসও -8859-1 (বা এএসসিআইআই) নেই। সিস্টেমে সমর্থিত নয় এমন অক্ষরগুলির সাথে ব্যবহারকারীর নাম / পাসওয়ার্ড ব্যবহার করার চেষ্টা করা ভাঙ্গা আচরণ বা (আরও খারাপ) সুরক্ষার অবনতি ঘটাতে পারে।


4
ভাল, ইউটিএফ -8 ব্যবহার করা অন্য পক্ষের সম্পর্কে না জেনে যদি সহায়তা করে না। সুতরাং ভাল হবে যদি স্প্রিং ফ্রেমওয়ার্ক < গ্রিনবিটস.ডি / টেক / ওয়েবেডাভ / আরএফসি 7617.html#rfc.section.2.1 >
জুলিয়ান রেসকে

4
@ জুলিয়ানআরস্কে আমি জানিয়েছি যে এটি কীভাবে একটি সবচেয়ে সাধারণ ফ্রেমওয়ার্কে প্রয়োগ করা হয় এবং এটির একটি সম্ভাব্য কারণ। মেসেঞ্জারে গুলি করবেন না!
holmis83

4

আপনি যদি লগইন প্রম্পটে অ-এসিআই অক্ষর প্রবেশ করার সময় ব্রাউজারগুলি কী করতে আগ্রহী হন, আমি কেবল ফায়ারফক্সের সাথে চেষ্টা করেছি।

প্রতিটি ইউনিকোড মানের ন্যূনতম উল্লেখযোগ্য বাইট গ্রহণ করে এটি অলসভাবে ISO-8859-1-এ রূপান্তরিত বলে মনে হচ্ছে, যেমন:

User: 豚 (\u8c5a)
Password: 虎 (\u864e)

যেমন এনকোড করা হয়:

User: Z (\u005a)
Password: N (\u004e)

0x5a 0x3a 0x4e বেস64-> ডাব্লুজেপিও


4
হ্যাঁ, এটি ফায়ারফক্সের পুরানো আচরণ। এটি পরিবর্তন করা হয়েছিল (ভি 5 in তে, এটি মনে হয়) এবং পরিবর্তে এখন ইউটিএফ -8 ব্যবহার করে।
sleske

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