مشكلة مفاتيح API التي لا تنتهي صلاحيتها أبدًا
المفتاح الذي صدر قبل سنوات، ولم يُبدَّل قط، ولا يزال صالحًا حتى اليوم ليس ميزة مريحة. إنه عبء لم ينظر فيه أحد فعلًا منذ سنوات.
تجيب الحصة على مستوى الحساب عن سؤال بسيط: كم استهلك هذا المفتاح بعينه. وهي أول ما يخطر تتبعه بطبيعة الحال، لكنها لا تكفي وحدها، لأن المفتاح مجرد بيانات اعتماد، وبيانات الاعتماد يمكن مضاعفتها. فمن يصرّ على تجاوز حد على مستوى الحساب يستطيع في كثير من الأحيان أن ينشئ حسابًا آخر ببساطة، ويولّد مفتاحًا آخر، ويبدأ حصة جديدة، ما لم يكن هناك شيء آخر يتتبع بُعدًا لا يُعاد ضبطه لمجرد إصدار بيانات اعتماد جديدة.
لهذا وُجدت الحصص على مستوى الشبكة. فكل شبكة، أي كتلة /24 واحدة لعناوين IPv4 أو كتلة /48 واحدة لعناوين IPv6، تحصل على حصة مجانية مشتركة قدرها 2,500 طلب يوميًا، تُحتسب على حركة المرور دون مفتاح وعلى أي مفاتيح مسجلة من تلك الشبكة معًا. ولو اقتصر الأمر على حد على مستوى الحساب، لأمكن لأي شخص أن يولّد مفاتيح جديدة بلا نهاية ليعيد ضبط حصته المجانية مرة بعد مرة. أما الحد على مستوى الشبكة فيسد هذه الثغرة تحديدًا، لأنه يتتبع المصدر الفعلي لحركة المرور، لا مجرد بيانات الاعتماد التي صادف أنها مرفقة بها.
لا يكفي أي من المقياسين وحده، ومن المفيد تحديد ما يحمي منه كل منهما بدقة، لأنهما يعالجان مشكلتين مختلفتين. يحمي التتبع على مستوى الحساب من استخدام بيانات اعتماد واحدة بما يتجاوز كثيرًا ما ينبغي، وهذا مهم لدقة الفوترة ولاكتشاف مفتاح مسرّب يُستخدم في مكان لا ينبغي أن يُستخدم فيه. ويحمي التتبع على مستوى الشبكة من مضاعفة الحصة المجانية تحديدًا عبر التسجيل المتكرر، وهو نمط إخفاق مختلف لا يستطيع التتبع على مستوى الحساب وحده رؤيته، لأن كل حساب جديد يبدو طبيعيًا تمامًا إذا نُظر إليه منفردًا.
تشغيل المقياسين معًا يخلق بالفعل تعقيدًا مشروعًا: فعدة مستخدمين حقيقيين يتشاركون شبكة واحدة، مثل شركة تعمل خلف عدد قليل من عناوين IP العامة، قد يصطدمون نظريًا بسقف على مستوى الشبكة لا علاقة له بالاستخدام الفعلي لأي مستخدم منفرد. ونتعامل مع ذلك عبر خانات IP متجددة، أي عدد ثابت من العناوين المختلفة التي يمكن استخدام المفتاح منها، وعبر ترويسات الحصة التي تُظهر بالضبط كم من هذه الخانات مستخدم مقارنة بالحد، حتى تتمكن الشبكة المشتركة المشروعة من رؤية وضعها الحقيقي بدل الاصطدام بجدار غامض بلا أي تفسير.
نرى أن هذه حالة يكون فيها التصميم الأبسط، أي تتبع بُعد واحد فقط، أسوأ فعلًا للمستخدمين الصادقين، لا مجرد أقل حماية من إساءة الاستخدام. فالحد على مستوى الشبكة وحده سيعاقب حسابًا بسبب نشاط آخر لا علاقة له به على الشبكة نفسها. والحد على مستوى الحساب وحده سيترك الحصة المجانية عرضة للمضاعفة بلا نهاية على يد أي شخص مستعد لإنشاء ما يكفي من الحسابات. تشغيل الاثنين معًا، مع إمكانية رؤية كل منهما عبر ترويسات الاستجابة، يعني أجزاء متحركة أكثر، لكنه النسخة التي تحمي فعلًا ما يُفترض أن تحميه الحصة المجانية دون أن تعاقب بصمت من يستخدمونها كما ينبغي.