URLs and Hashing

يحتوي هذا القسم على مواصفات تفصيلية حول كيفية التحقّق من عناوين URL من قِبل العملاء.

تحديد عناوين URL الأساسية

قبل التحقّق من أي عناوين URL، من المتوقّع أن يُجري العميل بعض عمليات تحديد عنوان URL الأساسي على عنوان URL هذا.

في البداية، نفترض أنّ العميل قد عالج عنوان URL وجعله صالحًا وفقًا لمعيار RFC 2396. إذا كان عنوان URL يستخدم اسم نطاق دوليًا (IDN)، على العميل تحويل عنوان URL إلى تمثيل ASCII Punycode. يجب أن يتضمّن عنوان URL مكوّن مسار، أي أنّه يجب أن يتضمّن شرطة واحدة على الأقل بعد النطاق (http://google.com/ بدلاً من http://google.com).

أولاً، عليك إزالة أحرف علامة التبويب (0x09) وحرف الرجوع إلى أول السطر (0x0d) وحرف LF (0x0a) من عنوان URL. لا تزيل تسلسلات إلغاء العلامات لهذه الأحرف (مثل %0a).

ثانيًا، إذا كان عنوان URL ينتهي بجزء، أزِل الجزء. على سبيل المثال، اختصر http://google.com/#frag إلى http://google.com/.

ثالثًا، عليك إزالة ترميز النسبة المئوية لعنوان URL بشكل متكرّر إلى أن لا يتبقّى أي ترميز. (قد يؤدي ذلك إلى جعل عنوان URL غير صالح).

لتوحيد اسم المضيف:

استخرِج اسم المضيف من عنوان URL، ثم اتّبِع الخطوات التالية:

  1. أزِل جميع النقاط البادئة واللاحقة.
  2. استبدِل النقاط المتتالية بنقطة واحدة.
  3. إذا كان بالإمكان تحليل اسم المضيف كعنوان IPv4، عليك تسويته إلى 4 قيم عشرية مفصولة بنقاط. يجب أن يعالج العميل أي ترميز قانوني لعنوان IP، بما في ذلك الترميز الثماني والسادس عشر وأقل من أربعة مكوّنات.
  4. إذا كان بالإمكان تحليل اسم المضيف كعنوان IPv6 بين قوسين، عليك تسويته عن طريق إزالة الأصفار البادئة غير الضرورية في المكوّنات وتجميع مكوّنات الصفر باستخدام بنية النقطتَين المزدوجتَين. على سبيل المثال، يجب تحويل [2001:0db8:0000::1] إلى [2001:db8::1]. إذا كان اسم المضيف أحد نوعَي عناوين IPv6 الخاصَّين التاليَين، عليك تحويله إلى IPv4:
    • عنوان IPv6 تم ربطه بعنوان IPv4، مثل [::ffff:1.2.3.4]، والذي يجب تحويله إلى 1.2.3.4
    • عنوان NAT64 يستخدم البادئة المعروفة 64:ff9b::/96، مثل [64:ff9b::1.2.3.4]، والذي يجب تحويله إلى 1.2.3.4.
  5. اكتب السلسلة بأحرف صغيرة.

لتحديد المسار الأساسي:

  1. حلّ التسلسلَين /../ و/./ في المسار من خلال استبدال /./ بـ /، وإزالة /../ مع مكوّن المسار السابق
  2. استبدِل سلاسل الشُرط المتتالية بشرطة واحدة.

لا تطبِّق عمليات تحديد عناوين URL الأساسية هذه على مَعلمات طلب البحث.

في عنوان URL، أضِف رمز الإلغاء بالمئة إلى جميع الأحرف التي تقلّ عن أو تساوي 32 ASCII أو تزيد عن أو تساوي 127 أو # أو %. يجب أن تستخدم عمليات الهروب أحرفًا سداسية عشرية كبيرة.

تعبيرات بادئة المسار واللاحقة للمضيف

بعد توحيد عنوان URL، تكون الخطوة التالية هي إنشاء تعبيرات اللاحقة/البادئة. يتألّف كل تعبير لاحقة/بادئة من لاحقة مضيف (أو مضيف كامل) وبادئة مسار (أو مسار كامل).

سيُنشئ العميل ما يصل إلى 30 مجموعة مختلفة من لاحقة المضيف وبادئة المسار. لا تستخدِم هذه التركيبات سوى مكوّنات المضيف والمسار في عنوان URL. يتم تجاهل المخطط واسم المستخدم وكلمة المرور والمنفذ. إذا كان عنوان URL يتضمّن مَعلمات طلب بحث، ستتضمّن مجموعة واحدة على الأقلّ المسار الكامل ومَعلمات طلب البحث.

بالنسبة إلى المضيف، سيحاول العميل استخدام خمس سلاسل مختلفة بحد أقصى. وهذه الأنواع الفرعية هي:

  • إذا لم يكن اسم المضيف حرفيًا لعنوان IPv4 أو IPv6، يمكن إنشاء ما يصل إلى أربعة أسماء مضيفين من خلال البدء بنطاق eTLD+1 وإضافة مكوّنات رئيسية متتالية. يجب أن يستند تحديد eTLD+1 إلى قائمة اللواحق العامة. على سبيل المثال، سيؤدي a.b.example.com إلى نطاق eTLD+1‏ example.com بالإضافة إلى المضيف الذي يتضمّن مكوّن مضيف إضافيًا b.example.com.
  • اسم المضيف الدقيق في عنوان URL استنادًا إلى المثال السابق، سيتم وضع علامة في المربّع a.b.example.com.

بالنسبة إلى المسار، سيحاول العميل ست سلاسل مختلفة بحد أقصى. وهذه الأنواع الفرعية هي:

  • المسار الدقيق لعنوان URL، بما في ذلك مَعلمات طلب البحث
  • المسار الدقيق لعنوان URL، بدون مَعلمات طلب البحث
  • المسارات الأربعة التي يتم إنشاؤها من خلال البدء من الجذر (/) وإلحاق مكوّنات المسار بشكلٍ متسلسل، بما في ذلك الشرطة المائلة للخلف

توضِّح الأمثلة التالية سلوك التحقّق:

بالنسبة إلى عنوان URL http://a.b.com/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://a.b.c.d.e.f.com/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/

(ملاحظة: تخطّى b.c.d.e.f.com، لأنّنا سنأخذ فقط المكوّنات الخمسة الأخيرة لاسم المضيف واسم المضيف الكامل).

بالنسبة إلى عنوان 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/

التجزئة

تستخدِم ميزة "التصفّح الآمن من Google" حصريًا دالة SHA256 كدالة التجزئة. يجب تطبيق دالة التجزئة هذه على التعبيرات أعلاه.

سيتم اقتطاع التجزئة الكاملة التي تبلغ 32 بايت إلى 4 بايت أو 8 بايت أو 16 بايت، وذلك حسب الظروف:

  • عند استخدام طريقة hashes.search، نطلب حاليًا اقتطاع التجزئات في الطلب إلى 4 بايت بالضبط. سيؤدي إرسال وحدات بايت إضافية في هذا الطلب إلى تعريض خصوصية المستخدم للخطر.

  • عند تنزيل القوائم لقاعدة البيانات المحلية باستخدام طريقة hashList.get أو طريقة hashLists.batchGet، يتم ترميز طول التجزئات التي يرسلها الخادم ضمن اصطلاح التسمية للقوائم التي تحتوي على لاحقة تشير إلى طول التجزئة. اطّلِع على قسم القوائم المتاحة للحصول على مزيد من التفاصيل.