حد
يوجد مثل هذا التقييد على LinkedIn -
حد الاستخدام التجاري . من المحتمل جدًا أنك ، مثلي ، حتى وقت قريب ، لم تصادفه أو تسمع به مطلقًا.

جوهر الحد هو أنه إذا كنت تستخدم أشخاصًا يبحثون خارج جهات الاتصال الخاصة بك بشكل متكرر (لا توجد مقاييس دقيقة ، تقرر الخوارزمية ، استنادًا إلى تصرفاتك - عدد المرات التي بحثت فيها وأضفت أشخاصًا) ، ستقتصر نتيجة البحث على ثلاثة ملفات شخصية ، بدلاً من 1000 ( الافتراضي 100 صفحة ، 10 ملامح لكل صفحة). يتم إعادة تعيين الحد في بداية كل شهر. بطبيعة الحال ،
لا تملك حسابات متميزة مثل هذا القيد .
ولكن منذ وقت ليس ببعيد ، بالنسبة لمشروع حيوان أليف واحد ، بدأت ألعب كثيراً مع البحث على LinkedIn وفجأة حصلت على هذا التقييد. بطبيعة الحال ، لم يعجبني هذا كثيرًا ، لأنني لم أستخدمه لأي أغراض تجارية ، لذلك كان الفكر الأول هو دراسة التقييد ومحاولة الالتفاف عليه.
[
توضيح مهم - يتم تقديم المواد الواردة في المقال لأغراض إعلامية وتعليمية فقط. المؤلف لا يشجع استخدامها لأغراض تجارية. ]
تحديث مهم - أخذ LinkedIn بعين الاعتبار الثغرة الأمنية وإصلاحه مؤخرًا. تجاوز والبرنامج المساعد لم تعد تعمل.
نحن ندرس المشكلة
لدينا: بدلاً من عشرة ملفات تعريف ذات ترقيم صفحات ، يُرجع البحث ثلاثة فقط ، وبعد ذلك يتم إدراج كتلة بها "توصية" من حساب مميز وأدناه ملفات تعريف ضبابية وغير قابلة للنقر.
على الفور ، تصل اليد إلى وحدة تحكم المطور لرؤية هذه الملفات الشخصية المخفية - ربما يمكننا إزالة بعض الأنماط التي تضع البلوز ، أو استخراج المعلومات من الكتلة في الترميز. ولكن ، كما هو متوقع ، تعد ملفات التعريف هذه مجرد
صور كعبرة ولا تخزن أي معلومات.

حسنًا ، دعنا الآن نلقي نظرة على علامة تبويب "الشبكة" ونرى ما إذا كانت نتائج البحث البديلة تُرجع والتي تعمل على إرجاع ثلاثة ملفات تعريف فقط بالفعل نجد الاستعلام الذي يهمنا "/ api / search / blended" وننظر إلى الإجابة.

تأتي التوصيفات في الصفيف "المضمّن" ، لكن يوجد بالفعل 15 كيانًا فيها. في هذه الحالة ، الثلاثة الأولى هي كائنات تحتوي على معلومات إضافية ، ويحتوي كل كائن على معلومات في ملف تعريف معين (على سبيل المثال ، ملف التعريف هو علاوة).

الـ 12 التالية هي ملفات تعريف حقيقية - نتائج بحث ، سيتم عرض ثلاثة منها فقط لنا. كما يمكنك بالفعل تخمين ، فإنه يعرض فقط أولئك الذين يتلقون معلومات إضافية (الكائنات الثلاثة الأولى). على سبيل المثال ، إذا أخذت الإجابة من الملف الشخصي دون حد ، فسيأتي 28 كيانًا - 10 كائنات بامتداد. المعلومات و 18 ملامح.
الإجابة عن الملف الشخصي دون حدود لماذا يوجد أكثر من 10 ملفات تعريف ، على الرغم من طلب 10 ملفات ، ولا يشاركون في العرض ، حتى في الصفحة التالية لن يكونوا - أنا لا أعرف حتى الآن. إذا قمت بتحليل عنوان url للطلب ، يمكنك رؤية هذا العدد = 10 (عدد التوصيفات المطلوب إرجاعها في الاستجابة ، بحد أقصى 49).

سأكون سعيدًا بأي تعليقات حول هذا الموضوع.
تجارب
حسنًا ، الشيء الأكثر أهمية الذي نعرفه الآن على وجه اليقين - المزيد من الملفات الشخصية تأتي في الإجابة أكثر مما تظهر لنا. حتى نتمكن من الحصول على المزيد من البيانات ، على الرغم من الحد. دعونا نحاول سحب api بأنفسنا ، مباشرةً من وحدة التحكم ، باستخدام الجلب.

من المتوقع أن نتلقى خطأ 403. وهذا بسبب الأمان ، وهنا لا نرسل رمز CSRF (
CSRF على ويكيبيديا . باختصار ، يتم إضافة رمز مميز فريد لكل طلب يتم التحقق منه على الخادم للتأكد من صحته).

يمكن نسخها من أي طلب ناجح آخر أو من ملفات تعريف الارتباط ، حيث يتم تخزينها في حقل "JSESSIONID".
أين تجد رمزرأس طلب آخر:

أو من ملفات تعريف الارتباط ، مباشرة من خلال وحدة التحكم:

نحن نحاول مرة أخرى ، هذه المرة تمرير الإعدادات لجلب ، والتي نحدد فيها رمز csrf لدينا كمعلمة في الرأس.

النجاح ، نحصل على جميع التشكيلات 10. : تادا:
نظرًا للاختلاف في الرؤوس ، تختلف بنية الاستجابة قليلاً عن ما يأتي في الطلب الأصلي. يمكنك الحصول على نفس البنية إذا أضفت "قبول:" application / vnd.linkedin.normalized + json + 2.1 "إلى كائننا ، بجوار الرمز المميز csrf.
استجابة العينة مع رأس المضافة
المزيد عن قبول الرأس
ما التالي؟
بعد ذلك يمكنك تحرير (بيديك أو أتمتة) المعلمة "start" ، مع الإشارة إلى الفهرس ، بدءًا من ذلك ، سنمنح 10 ملفات تعريف (افتراضي = 0) من نتيجة البحث بالكامل. بمعنى آخر ، بزيادة عدد الصفحات بمقدار 10 بعد كل طلب ، نحصل على ترقيم الصفحات المعتاد ، 10 ملفات تعريف في وقت واحد.
في هذه المرحلة ، كان لدي ما يكفي من البيانات والحرية لمواصلة العمل في مشروع الحيوانات الأليفة. ولكن كان من الخطيئة عدم محاولة عرض هذه البيانات في الحال ، لأنها في متناول اليد. في Ember ، والذي يستخدم في المقدمة ، لن نتسلق. تم توصيل JQuery بالموقع ، واستكشاف معرفة البنية الأساسية في الذاكرة ، يمكنك إنشاء ما يلي في بضع دقائق.
كود مسج const createProfileBlock = ({ headline, publicIdentifier, subline, title }) => { $('.search-results__list').append( `<li class="search-result search-result__occluded-item ember-view"> <div class="search-entity search-result search-result--person search-result--occlusion-enabled ember-view"> <div class="search-result__wrapper"> <div class="search-result__image-wrapper"> <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/"> <figure class="search-result__image"> <div class="ivm-image-view-model ember-view"> <img class="lazy-image ivm-view-attr__img--centered EntityPhoto-circle-4 presence-entity__image EntityPhoto-circle-4 loaded" src="http://www.userlogos.org/files/logos/give/Habrahabr3.png" /> </div> </figure> </a> </div> <div class="search-result__info pt3 pb4 ph0"> <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/"> <h3 class="actor-name-with-distance search-result__title single-line-truncate ember-view"> ${title.text} </h3> </a> <p class="subline-level-1 t-14 t-black t-normal search-result__truncate">${headline.text}</p> <p class="subline-level-2 t-12 t-black--light t-normal search-result__truncate">${subline.text}</p> </div> </div> </div> <li>` ); };
إذا قمت بذلك مباشرة في وحدة التحكم في صفحة البحث ، فسيضيف زرًا يقوم بتحميل 10 ملفات تعريف جديدة في كل مرة تنقر فيها ، ويجعلها قائمة. بطبيعة الحال ، رمزية و url قبل هذا التغيير إلى الضرورة. ستحتوي كتلة ملف التعريف على اسم وموقع وموقع ورابط إلى ملف التعريف وصورة كعب الروتين.

استنتاج
وبالتالي ، وبأقل جهد ممكن ، تمكنا من العثور على نقطة ضعيفة واستعادة بحثنا دون قيود. كان يكفي لتحليل البيانات ومسارها ، للنظر في الاستعلام نفسه.
لا يمكنني القول أن هذه مشكلة خطيرة لـ LinkedIn ، لأنها لا تشكل أي تهديد. الحد الأقصى هو الربح المفقود بسبب هذه "الجولات" ، والتي تسمح بعدم دفع قسط التأمين. ربما تكون استجابة الخادم هذه ضرورية لأجزاء الموقع الأخرى للعمل بشكل صحيح ، أو هل هذا ببساطة
كسل للمطورين ، قلة الموارد التي لا تسمح بعمل جيد. (ظهر التقييد في يناير 2015 ، قبل أن لا يكون هذا الحد).
PS
قديم PSبطبيعة الحال ، رمز jQuery هو مثال بدائي إلى حد ما من الميزات. في الوقت الحالي ، قمت بإنشاء امتداد للمتصفح ليناسب احتياجاتي. ويضيف أزرار التحكم ويجعل ملفات تعريف كاملة مع الصور ، زر دعوة والاتصالات العامة. بالإضافة إلى ذلك ، فهو يجمع بشكل ديناميكي عوامل تصفية المواقع والشركات وغيرها ، ويأخذ رمزًا مميزًا من ملفات تعريف الارتباط. لذلك لا تحتاج إلى ترميز أي شيء. حسنًا ، يضيف حقول إعدادات إضافية ، "عدد ملفات التعريف المطلوب طلبها في وقت واحد ، وحتى 49."

ما زلت أعمل على هذه الإضافة وأعتزم وضعها في المجال العام. اكتب إذا كنت مهتمًا.
حسب الطلب الشائع ، وضع الوظيفة الإضافية في وصول مفتوح ، لقد قمت بإنشاء وظيفة إضافية للمتصفح ونشرتها للاستخدام العام (مجانًا وحتى بدون عمال مناجم). هناك ، يتم تطبيق وظيفة تجاوز الحد فقط ، ولكن أيضًا وسائل الراحة الأخرى.
عرض وتنزيل هنا -
adam4leos.imtqy.comنظرًا لأن هذا إصدار ألفا ، فلا تتردد في الكتابة إلي عن الأخطاء والأفكار وحتى واجهة مستخدم أنيقة
غبية . أواصل تطوير الوظيفة الإضافية وسأقوم بنشر إصدارات جديدة بشكل دوري.
تحديث مهم - أخذ LinkedIn بعين الاعتبار الثغرة الأمنية وإصلاحه مؤخرًا. تجاوز والبرنامج المساعد لم تعد تعمل.