إيقاف واجهات برمجة التطبيقات وإزالتها في Chrome 56

جو ميدلي
جو ميدلي

في كل إصدار تقريبًا من Chrome، نشهد عددًا كبيرًا من التحديثات والتحسينات للمنتج وأدائه وإمكانات "منصة الويب" أيضًا. توضّح هذه المقالة عمليات الإيقاف النهائي وعمليات الإزالة في الإصدار 56 من Chrome، الذي يتوفَّر في إصدار تجريبي اعتبارًا من 8 كانون الأول (ديسمبر). تخضع هذه القائمة للتغيير في أي وقت.

إلغاء التوافق مع شهادات SHA-1

أظهرت خوارزمية التجزئة SHA-1 أولاً علامات الضعف قبل أحد عشر عامًا، وتشير الأبحاث الأخيرة إلى الاحتمال الوشيك لهجمات يمكن أن تؤثر بشكل مباشر على سلامة البنية الأساسية للمفتاح العام على الويب (PKI).

لحماية المستخدمين من هذه الهجمات، لن يدعم Chrome بعد ذلك شهادات SHA-1 التي بدأت في Chrome 56، والذي صدر إصداره الثابت في كانون الثاني (يناير) 2017. وتؤدي زيارة أحد المواقع الإلكترونية باستخدام هذه الشهادة إلى عرض تحذير بينيّ. ونوفر مزيدًا من التفاصيل في Chrome Security Blog.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة رموز ECDSA في وضع CBC في بروتوكول أمان طبقة النقل (TLS)

هناك عيوب في إنشاء وضع CBC لـ TLS، مما يجعله هشًا وصعبًا للغاية تنفيذه بشكل آمن. على الرغم من أن تشفير وضع CBC لا يزال مستخدَمًا على نطاق واسع مع RSA، إلا أنه غير متاح تقريبًا في ECDSA. ولا تزال المتصفحات الأخرى تستخدم هذه الرموز، ونعتقد أن الخطر منخفض. بالإضافة إلى ذلك، يستخدم عدد قليل من المؤسسات ECDSA في بروتوكول أمان طبقة النقل (TLS)، ويكون ذلك عادةً من خلال إعداد أكثر تعقيدًا (يتوافق بعض البرامج القديمة مع RSA فقط)، لذلك نتوقّع صيانة مواقع ECDSA بشكل أفضل وأن تكون أكثر استجابة في حال حدوث مشاكل.

أضاف الإصدار 1.2 من بروتوكول أمان طبقة النقل (TLS) رموزًا جديدة استنادًا إلى AEAD التي تتجنّب هذه المشاكل، وتحديدًا AES_128_GCM أو AES_256_GCM أو CHACHA20_POLY1305. على الرغم من أنّنا نطلب منك في الوقت الحالي تنفيذ هذا الإجراء فقط على المواقع الإلكترونية التي تستند إلى "ECDSA"، إلّا أنّه يُنصح به لجميع المشرفين. لا تعمل التشفيرات المستندة إلى AEAD على تحسين الأمان فحسب، بل تعمل أيضًا على تحسين الأداء. تتوافق AES-GCM مع الأجهزة على وحدات المعالجة المركزية الحديثة وتوفّر ChaCha20-Poly1305 عمليات تنفيذ سريعة للبرامج. وفي الوقت نفسه، يتطلب تشفير CBC إجراءات تخفيف معقدة وبطيء مع الوصول إلى PRNG في كل سجل صادر. يُعد التشفير المستند إلى AEAD أيضًا شرطًا أساسيًا لعمليات التحسين لكل من HTTP/2 وFalse Start.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة إيماءات المستخدم من التمرير باللمس

لقد رأينا عدة أمثلة للإعلانات المكتوبة بطريقة سيئة أو ضارة، والتي تؤدي إلى تشغيل التنقل في التمرير باللمس إما في touchstart أو في جميع أحداث touchend. إذا كان لا يمكن لحدث "العجلة" فتح نافذة منبثقة، فلا ينبغي أن يؤدي التمرير باللمس إلى ذلك كذلك. وقد يؤدي ذلك إلى إيقاف بعض السيناريوهات، على سبيل المثال، عدم تشغيل الوسائط عند اللمس أو النوافذ المنبثقة التي لا تفتح عند اللمس. يفشل Safari بالفعل في فتح النوافذ المنبثقة في كل هذه السيناريوهات بشكل غير ملحوظ.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

عدم السماح بجميع عمليات استرجاع النصوص البرمجية التي تتضمّن سمات نوع/لغة غير صالحة

في الوقت الحالي، يجلب الماسح الضوئي للتحميل المسبق في Chrome العناصر في عناصر <scripts> بغض النظر عن قيمة السمة type أو language، على الرغم من أنّ النص البرمجي لن يتم تنفيذه عند التحليل. من خلال إيقاف الاسترجاع نهائيًا، سيكون لماسح التحميل المسبق والمحلل الدلالي نفس دلالات الألفاظ، ولن نبدأ في عمليات الجلب للنصوص البرمجية التي لن نستخدمها. ويهدف هذا إلى حفظ البيانات للمستخدمين الذين ينتقلون إلى المواقع الإلكترونية التي تحتوي على الكثير من علامات النصوص البرمجية المخصّصة التي تمت معالجتها لاحقًا (مثل type="text/template").

تغطي sendBeacon API بشكل كافٍ حالة استخدام نصوص برمجية غير صالحة لاختبار اتصال الخوادم.

ويتماشى هذا التغيير مع Chrome وSafari، على الرغم من أنّ Firefox لا يزال يطلب نصوصًا برمجية بغض النظر عن نوعها أو لغتها.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة MediaStreamTrack.getSources()

لم تعُد هذه الطريقة جزءًا من المواصفات وغير متاحة لأي متصفّح كبير آخر. وقد تم استبداله بالرمز MediaDevices.enumerateDevices()، الذي كان يتوافق مع Blink بدون علامات منذ الإصدار 47، وهو متوافق أيضًا مع متصفحات أخرى. وفي ما يلي مثال على ذلك. تستخدم دالة getCameras() الافتراضية هذه أولاً ميزة "رصد الميزات" للعثور على enumerateDevices() واستخدامه. إذا تعذّر رصد الميزة، يتم البحث عن getSources() في MediaStreamTrack. وأخيرًا، إذا لم يكن هناك دعم من أي نوع لواجهة برمجة التطبيقات، يمكنك عرض مصفوفة cameras الفارغة.

    function getCameras(camerasCallback) {
      var cameras = [];
      if('enumerateDevices' in navigator.mediaDevices) {
         navigator.mediaDevices.enumerateDevices()
          .then(function(sources) {
            return sources.filter(function(source) { 
              return source.kind == 'videoinput' 
            });
          })
          .then(function(sources) {
            sources.forEach(function(source) {
              if(source.label.indexOf('facing back') >= 0) {
                // move front facing to the front.
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            });
            camerasCallback(cameras);
          });
      }
      else if('getSources' in MediaStreamTrack) {
        MediaStreamTrack.getSources(function(sources) {

          for(var i = 0; i < sources.length; i++) {
            var source = sources[i];
            if(source.kind === 'video') {

              if(source.facing === 'environment') {
                // cameras facing the environment are pushed to the front of the page
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            }
          }
          camerasCallback(cameras);
        });
      }
      else {
        // We can't pick the correct camera because the API doesn't support it.
        camerasCallback(cameras);
      }
    };

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة توجيه CSP المنعكس xss

كانت المسودات الأوّلية لمواصفات المستوى 2 من سياسة أمان المحتوى تتضمن توجيه reflected-xss لا يقدّم سوى عنوان X-XSS-Protection بالاستناد إلى بنية مختلفة. تمّت إزالة هذا التوجيه من المواصفات في العام 2015، ولكن ليس قبل تنفيذه في Chrome. تتم الآن إزالة دعم هذا التوجيه.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

استبدال توجيه "المُحيل" في سياسة أمان المحتوى (CSP)

أتاح توجيه referrer في سياسة أمان المحتوى لمالكي المواقع الإلكترونية ضبط سياسة المُحيل من عنوان HTTP. ليس لهذه الميزة استخدام منخفض جدًا فحسب، بل لم تعد جزءًا من أي من مواصفات W3C أيضًا.

يجب أن تستخدم المواقع الإلكترونية التي لا تزال بحاجة إلى هذه الوظيفة <meta name="referrer"> أو عنوان Referrer-Policy الجديد.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة الحقل PaymentAddress.careOf

تحتوي واجهة PaymentAddress على حقل careOf وهو غير عادي (لا تتيحه أي معايير عناوين معروفة). الحقل careOf غير ضروري أيضًا، لأنّ حقلَي المستلِم والمؤسسة يتيحان بشكل كافٍ جميع حالات الاستخدام الضرورية. تؤدي إضافة careOf إلى حدوث مشاكل كبيرة من حيث إمكانية التشغيل التفاعلي مع مخططات العناوين البريدية وواجهات برمجة التطبيقات الحالية. لإجراء مناقشة كاملة، يُرجى الاطّلاع على اقتراح إزالة المواصفات على GitHub.

هناك نية للإزالة | خطأ Chromium

إزالة SVGViewElement.viewTarget

لا تشكّل السمة SVGViewElement.viewTarget جزءًا من مواصفات SVG2.0 واستخدامها صغير أو غير متوفّر. تم إيقاف هذه السمة في الإصدار 54 من Chrome وتمت إزالتها الآن.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium