تجاوز حد بحث LinkedIn عن طريق اللعب مع API

حد


يوجد مثل هذا التقييد على 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>` ); }; //  ,      const fetchProfiles = () => { //  const csrf = 'ajax:9082932176494192209'; //    ,   const settings = { headers: { 'csrf-token': csrf } } //  ,       const url = `https://www.linkedin.com/voyager/api/search/blended?count=10&filters=List(geoRegion-%3Ejp%3A0,network-%3ES,resultType-%3EPEOPLE)&origin=FACETED_SEARCH&q=all&queryContext=List(spellCorrectionEnabled-%3Etrue,relatedSearchesEnabled-%3Etrue)&start=${nextItemIndex}`; /*  ,        ,       10 */ fetch(url, settings).then(response => response.json()).then(data => { data.elements[0].elements.forEach(createProfileBlock); nextItemIndex += 10; }); }; //      $('.search-results__list').find('li').remove(); //     $('.search-results__list').after('<button id="load-more">Load More</button>'); //     $('#load-more').addClass('artdeco-button').on('click', fetchProfiles); //        window.nextItemIndex = 0; 


إذا قمت بذلك مباشرة في وحدة التحكم في صفحة البحث ، فسيضيف زرًا يقوم بتحميل 10 ملفات تعريف جديدة في كل مرة تنقر فيها ، ويجعلها قائمة. بطبيعة الحال ، رمزية و url قبل هذا التغيير إلى الضرورة. ستحتوي كتلة ملف التعريف على اسم وموقع وموقع ورابط إلى ملف التعريف وصورة كعب الروتين.



استنتاج


وبالتالي ، وبأقل جهد ممكن ، تمكنا من العثور على نقطة ضعيفة واستعادة بحثنا دون قيود. كان يكفي لتحليل البيانات ومسارها ، للنظر في الاستعلام نفسه.

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

PS


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



ما زلت أعمل على هذه الإضافة وأعتزم وضعها في المجال العام. اكتب إذا كنت مهتمًا.


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

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

تحديث مهم - أخذ LinkedIn بعين الاعتبار الثغرة الأمنية وإصلاحه مؤخرًا. تجاوز والبرنامج المساعد لم تعد تعمل.

Source: https://habr.com/ru/post/ar462167/


All Articles