URLs and Hashing

এই বিভাগে ক্লায়েন্ট কিভাবে URL চেক করে তার বিস্তারিত বিবরণ রয়েছে।

ইউআরএলের ক্যানোনিকালাইজেশন

কোনো ইউআরএল চেক করার আগে, ক্লায়েন্ট সেই ইউআরএলে কিছু ক্যানোনিকালাইজেশন করবে বলে আশা করা হয়।

শুরু করার জন্য, আমরা ধরে নিই যে ক্লায়েন্ট URLটিকে পার্স করেছে এবং RFC 2396 অনুযায়ী এটি বৈধ করেছে৷ যদি URLটি একটি আন্তর্জাতিক ডোমেন নাম (IDN) ব্যবহার করে, তাহলে ক্লায়েন্টকে URLটিকে ASCII Punycode উপস্থাপনায় রূপান্তর করতে হবে৷ URL একটি পাথ উপাদান অন্তর্ভুক্ত করা আবশ্যক; অর্থাৎ, ডোমেন অনুসরণ করে কমপক্ষে একটি স্ল্যাশ থাকতে হবে ( http://google.com/ এর পরিবর্তে http://google.com )।

প্রথমে, URL থেকে ট্যাব (0x09), CR (0x0d), এবং LF (0x0a) অক্ষরগুলি সরান৷ এই অক্ষরগুলির জন্য এস্কেপ সিকোয়েন্সগুলি সরিয়ে ফেলবেন না (যেমন %0a )।

দ্বিতীয়ত, যদি URL একটি খণ্ডে শেষ হয়, তাহলে খণ্ডটি সরান। উদাহরণস্বরূপ, http://google.com/#frag http://google.com/ এ ছোট করুন।

তৃতীয়ত, বারবার ইউআরএল-কে পার্সেন্ট-আনস্কেপ করুন যতক্ষণ না এতে আর শতাংশ-এস্কেপ না হয়। (এটি URLটিকে অবৈধ রেন্ডার করতে পারে।)

হোস্টনামটিকে ক্যানোনিকালাইজ করতে:

URL থেকে হোস্টনাম বের করুন এবং তারপর:

  1. সমস্ত অগ্রণী এবং পিছনের বিন্দুগুলি সরান৷
  2. একটি একক বিন্দু দিয়ে পরপর বিন্দু প্রতিস্থাপন করুন।
  3. যদি হোস্টনামটি একটি IPv4 ঠিকানা হিসাবে পার্স করা যায়, তাহলে এটিকে 4 ডট-বিভাজিত দশমিক মানগুলিতে স্বাভাবিক করুন। ক্লায়েন্টকে অক্টাল, হেক্স এবং চারটিরও কম উপাদান সহ যেকোনো আইনি আইপি-ঠিকানা এনকোডিং পরিচালনা করা উচিত।
  4. যদি হোস্টনামটিকে একটি বন্ধনীযুক্ত IPv6 ঠিকানা হিসাবে পার্স করা যায়, তাহলে উপাদানগুলির মধ্যে অপ্রয়োজনীয় অগ্রণী শূন্যগুলি সরিয়ে এবং ডাবল-কোলন সিনট্যাক্স ব্যবহার করে শূন্য উপাদানগুলি ভেঙে দিয়ে এটিকে স্বাভাবিক করুন। উদাহরণস্বরূপ [2001:0db8:0000::1] [2001:db8::1] এ রূপান্তরিত করা উচিত। যদি হোস্টনামটি নিম্নলিখিত দুটি বিশেষ IPv6 ঠিকানা প্রকারের মধ্যে একটি হয়, তাহলে তাদের IPv4 এ রূপান্তর করুন:
  5. পুরো স্ট্রিং ছোট হাতের অক্ষর.

পথটিকে আদর্শীকরণ করতে:

  1. /./ এর সাথে / , এবং /../ পূর্ববর্তী পাথ উপাদানের সাথে প্রতিস্থাপন করে /../ এবং /./ পাথের ক্রমগুলি সমাধান করুন৷
  2. একটানা স্ল্যাশের রানগুলিকে একটি একক স্ল্যাশ অক্ষর দিয়ে প্রতিস্থাপন করুন।

ক্যোয়ারী প্যারামিটারে এই পাথ ক্যানোনিকালাইজেশন প্রয়োগ করবেন না।

URL-এ, <= ASCII 32, >= 127, # , বা % সমস্ত অক্ষর শতাংশ-এস্কেপ করুন। এস্কেপগুলিতে বড় হাতের হেক্স অক্ষর ব্যবহার করা উচিত।

হোস্ট-প্রত্যয় পাথ-প্রিফিক্স এক্সপ্রেশন

একবার ইউআরএল ক্যানোনিকালাইজ করা হলে, পরবর্তী ধাপ হল প্রত্যয়/প্রিফিক্স এক্সপ্রেশন তৈরি করা। প্রতিটি প্রত্যয়/প্রিফিক্স এক্সপ্রেশনে একটি হোস্ট প্রত্যয় (বা সম্পূর্ণ হোস্ট) এবং একটি পাথ উপসর্গ (বা সম্পূর্ণ পথ) থাকে।

ক্লায়েন্ট 30টি পর্যন্ত বিভিন্ন সম্ভাব্য হোস্ট প্রত্যয় এবং পথ উপসর্গ সমন্বয় গঠন করবে। এই সমন্বয় শুধুমাত্র URL এর হোস্ট এবং পাথ উপাদান ব্যবহার করে। স্কিম, ব্যবহারকারীর নাম, পাসওয়ার্ড এবং পোর্ট বাতিল করা হয়েছে। যদি URL-এ ক্যোয়ারী প্যারামিটার থাকে, তাহলে অন্তত একটি সংমিশ্রণে সম্পূর্ণ পাথ এবং ক্যোয়ারী প্যারামিটার অন্তর্ভুক্ত থাকবে।

হোস্টের জন্য , ক্লায়েন্ট সর্বোচ্চ পাঁচটি ভিন্ন স্ট্রিং চেষ্টা করবে। তারা হল:

  • হোস্টনামটি যদি IPv4 বা IPv6 আক্ষরিক না হয়, তাহলে eTLD+1 ডোমেন দিয়ে শুরু করে এবং পরপর লিডিং কম্পোনেন্ট যোগ করে চারটি হোস্টনাম তৈরি হয়। eTLD+1-এর নির্ধারণ পাবলিক সাফিক্স তালিকার উপর ভিত্তি করে হওয়া উচিত। উদাহরণ স্বরূপ, abexample.com ফলে example.com এর eTLD+1 ডোমেইনের পাশাপাশি একটি অতিরিক্ত হোস্ট উপাদান b.example.com সাথে হোস্ট হবে।
  • URL-এ সঠিক হোস্টনাম। আগের উদাহরণ অনুসরণ করে, abexample.com চেক করা হবে।

পথের জন্য , ক্লায়েন্ট সর্বোচ্চ ছয়টি ভিন্ন স্ট্রিং চেষ্টা করবে। তারা হল:

  • ক্যোয়ারী প্যারামিটার সহ URL-এর সঠিক পথ।
  • ক্যোয়ারী প্যারামিটার ছাড়াই URL-এর সঠিক পথ।
  • চারটি পাথ রুট (/) থেকে শুরু করে এবং একটি ট্রেইলিং স্ল্যাশ সহ পর্যায়ক্রমে পাথ উপাদান যুক্ত করে গঠিত হয়।

নিম্নলিখিত উদাহরণগুলি চেকের আচরণকে চিত্রিত করে:

URL http://abcom/1/2.html?param=1 এর জন্য, ক্লায়েন্ট এই সম্ভাব্য স্ট্রিংগুলি চেষ্টা করবে:

a.b.com/1/2.html?param=1
a.b.com/1/2.html
a.b.com/
a.b.com/1/
b.com/1/2.html?param=1
b.com/1/2.html
b.com/
b.com/1/

URL http://abcdefcom/1.html এর জন্য, ক্লায়েন্ট এই সম্ভাব্য স্ট্রিংগুলি চেষ্টা করবে:

a.b.c.d.e.f.com/1.html
a.b.c.d.e.f.com/
c.d.e.f.com/1.html
c.d.e.f.com/
d.e.f.com/1.html
d.e.f.com/
e.f.com/1.html
e.f.com/
f.com/1.html
f.com/

(দ্রষ্টব্য: bcdefcom এড়িয়ে যান, যেহেতু আমরা শুধুমাত্র শেষ পাঁচটি হোস্টনামের উপাদান এবং সম্পূর্ণ হোস্টনাম নেব।)

URL http://1.2.3.4/1/ এর জন্য, ক্লায়েন্ট এই সম্ভাব্য স্ট্রিংগুলি চেষ্টা করবে:

1.2.3.4/1/
1.2.3.4/

URL http://example.co.uk/1 এর জন্য, ক্লায়েন্ট এই সম্ভাব্য স্ট্রিংগুলি চেষ্টা করবে:

example.co.uk/1
example.co.uk/

হ্যাশিং

গুগল সেফ ব্রাউজিং একচেটিয়াভাবে হ্যাশ ফাংশন হিসাবে SHA256 ব্যবহার করে। এই হ্যাশ ফাংশন উপরের অভিব্যক্তি প্রয়োগ করা উচিত.

সম্পূর্ণ 32-বাইট হ্যাশ, পরিস্থিতির উপর নির্ভর করে, 4 বাইট, 8 বাইট, বা 16 বাইটে কাটা হবে:

  • hashes.search পদ্ধতি ব্যবহার করার সময়, আমরা বর্তমানে অনুরোধে হ্যাশগুলিকে ঠিক 4 বাইটে ছোট করতে চাই। এই অনুরোধে অতিরিক্ত বাইট পাঠানো ব্যবহারকারীর গোপনীয়তার সাথে আপস করবে।

  • hashList.get পদ্ধতি বা hashLists.batchGet পদ্ধতি ব্যবহার করে স্থানীয় ডাটাবেসের জন্য তালিকাগুলি ডাউনলোড করার সময়, সার্ভার দ্বারা প্রেরিত হ্যাশের দৈর্ঘ্য হ্যাশের দৈর্ঘ্য নির্দেশকারী প্রত্যয় ধারণ করে এমন তালিকার নামকরণের মধ্যে এনকোড করা হয়। আরো বিস্তারিত জানার জন্য উপলব্ধ তালিকা বিভাগ দেখুন.