scripting - كيفية - عمل موقع.com مجانا



وقف البرامج النصية من الصفع موقع الويب الخاص بك مئات المرات في الثانية (20)

  1. بيع هذا البند إلى غير scripting البشر.

  2. اجعل الموقع يعمل بسرعة لا تبطئه برامج الروبوت.

  3. لا تشغل المستخدمين "العاديين" بأية مهام لإكمالها لإثبات أنهم بشر.

ربما لا تريد سماع هذا ، ولكن # 1 و 3 # تكون متنافية.

حسنا ، لا أحد يعرف أنك بوت أيضا. لا توجد طريقة برمجية لمعرفة ما إذا كان هناك إنسان على الطرف الآخر من الاتصال أم لا ، دون أن يطلب من الشخص القيام بشيء ما. منع البرامج النصية / البوتات من القيام بالأشياء على شبكة الإنترنت هو السبب كله اخترع CAPTCHAs. الأمر ليس كما لو كانت هناك مشكلة جديدة لم تشهد الكثير من الجهد. إذا كانت هناك طريقة أفضل للقيام بذلك ، وهي طريقة لا تنطوي على الإزعاج للمستخدمين الحقيقيين الذين يقومون بإجراء اختبار CAPTCHA ، فسيستخدمها الجميع بالفعل.

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

https://ffff65535.com

[update] لقد قبلت إجابة ، حيث تستحق شركة Lc الجائزة نظرًا للإجابة المدروسة جيدًا ، ولكن للأسف ، أعتقد أننا عالقون في السيناريو الأسوأ الأصلي: CAPTCHA الجميع على محاولات الشراء من الفضلات . شرح موجز: يجعل التخزين المؤقت / مواقع الويب من المستحيل بالنسبة لنا تتبع النتائج فعليًا ، وأي حل بديل (إرسال منارة ويب غير مخبأة ، والكتابة إلى جدول موحد ، وما إلى ذلك) يؤدي إلى إبطاء الموقع لأسوأ من البوتات. من المحتمل أن يكون هناك بعض الأجهزة الرخيصة من Cisco أو ما شابه ذلك التي يمكن أن تساعد على مستوى عالٍ ، ولكن من الصعب تبرير التكلفة إذا كان اختبار CAPTCHAing للجميع بديلاً. سأحاول تقديم شرح أكثر اكتمالاً هنا في وقت لاحق ، بالإضافة إلى تنظيف هذا البحث للباحثين المستقبليين (على الرغم من أن الآخرين مرحب بهم في المحاولة ، كما هو الحال مع ويكي المجتمع).

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

سأكون أكثر وضوحا مما كنت عليه من قبل: هذا هو الحال في مبيعات الحقيبة على woot.com. أنا رئيس Woot Workshop ، الشركة الفرعية لـ Woot التي تقوم بالتصميم ، تكتب أوصاف المنتج ، البودكاست ، منشورات المدونات ، وتدير المنتديات. أعمل في عالم css / html وأنا بالكاد على دراية ببقية عالم المطورين. أعمل بشكل وثيق مع المطورين وتحدثت من خلال جميع الإجابات هنا (والعديد من الأفكار الأخرى التي لدينا).

سهولة استخدام الموقع جزء كبير من عملي ، وجعل الموقع المثير والممتع هو الجزء الأكبر منه. هنا تستمد الأهداف الثلاثة أدناه. CAPTCHA يسيء الاستخدام ، والسرقات سرقة المتعة والإثارة من مبيعاتنا حماقة.

ولإعداد السيناريو أكثر من ذلك بقليل ، تنتقد برامج الروبوت صفحتنا الأولى عشرات المرات مرة أخرى في مسح الشاشة الثاني (و / أو مسح آر إس إس) من أجل بيع Random Crap. في اللحظة التي يرون فيها ذلك ، فإنه يشعل مرحلة ثانية من البرنامج الذي يسجل الدخول ، والنقرات التي أريدها واحدة ، يملأ النموذج ، ويشتري حماقة.

في الترتيب الحالي (2/6/2009) للأصوات:

lc : في stackoverflow والمواقع الأخرى التي تستخدم هذه الطريقة ، فإنها دائمًا ما تتعامل مع المستخدمين الذين تمت مصادقتهم (تسجيل الدخول) ، لأن المهمة التي يتم إجراؤها تتطلب ذلك.

على Woot ، يمكن للمستخدمين المجهولين (غير مسجلين) عرض صفحتنا الرئيسية. بعبارة أخرى ، يمكن أن تكون برامج التتبع غير مصادقة (ولا يمكن تتبعها بشكل أساسي باستثناء عنوان IP). لذا عدنا إلى البحث عن عناوين IP ، والتي أ) عديمة الفائدة إلى حد ما في هذا العصر من الشبكات السحابية والكسومبي spambot و b) أدرك الكثير من الأبرياء نظرا لعدد من الأعمال التي تأتي من عنوان IP واحد (ناهيك عن القضايا مع مزودي خدمات الإنترنت IP غير ثابت والأداء المحتمل يضرب لمحاولة تتبع هذا).

أوه ، واتصال الناس بنا سيكون أسوأ سيناريو ممكن. هل يمكننا الاتصال بهم؟

تبدو طرائق BradC Ned BradC رائعة ، لكنها مصممة بشدة BradC بنيت لشبكة من المواقع. مشكلتنا هي البوتات التي بنيت خصيصا لهزيمة موقعنا. من المحتمل أن تعمل بعض هذه الطرق لفترة قصيرة إلى أن يقوم المبرمجون بتطوير برامج التتبع الخاصة بهم لتجاهل مصيدة honeypot ، أو screencrape لأسماء التصنيفات القريبة بدلاً من معرفات النموذج ، واستخدام تحكم مستعرض قادر على javascript.

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

novatrust وأنا ، على سبيل novatrust ، أرحب novatrust الجدد لدينا. نحن نعرض في الواقع خلاصات rss للسماح بتطبيقات الجهات الخارجية بمسح موقعنا للحصول على معلومات عن المنتج ، ولكن ليس قبل الموقع الرئيسي html. إذا كنت أتصور ذلك بشكل صحيح ، فإن حلك يساعد في تحقيق الهدف 2 (مشكلات الأداء) من خلال التضحية تمامًا بالهدف 1 ، والاستقالة فقط من حقيقة أن البوتات سوف تشتري معظم الفضلات. لقد راجت استجابتك ، لأن تشاؤمك الأخير في الفقرة يبدو دقيقاً بالنسبة لي. يبدو أن هناك رصاصة فضية هنا.

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

أي نهج / أفكار أخرى؟ يستمر مطوري باستمرار في قول "لنفعل فقط اختبار CAPTCHA" ولكنني ما زلت آمل أن تكون هناك طريقة أقل تطفلاً لكل الأشخاص الفعليين الذين يريدون الحصول على بعض حماقتنا.

END UPDATE ، فيما يلي السؤال الأصلي:

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

ينتهي بك الأمر مع برامج الكتابة ، والسير ، والاختراقات التي تحاول برمجيا معرفة ما إذا كنت تبيع البند المذكور ، و [b] تأكد من أنهم من بين أول من يشترونها. هذا تمتص لسببين:

  1. ينتقد موقعك من قبل غير البشر ، مما يؤدي إلى تباطؤ كل شيء في كل شيء.

  2. وينتهي القائمون على كتابة السيناريو "بالفوز" بالمنتج ، مما يجعل النظاميين يشعرون بالغش.

من الحلول الواضحة على ما يبدو هو إنشاء بعض الأطواق أمام المستخدمين للقفز من خلال وضع طلباتهم ، ولكن هناك ثلاث مشكلات على الأقل في هذا:

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

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

ثالثا. حتى إذا لم يتمكن الكومبيوتر من "حل" القرص الخاص بك ، فلن يمنعهم في النهاية من صفحتك الأمامية ، ومن ثم يصدر صوتًا إنذارًا للشفرة لملء الطلب ، بطريقة إنسانية. نظرًا لأنهم يحصلون على ميزة من حل [a] ، فمن المرجح أن يربحوا [b] لأنهم سيكونون أول بشر يصلون إلى صفحة الطلب. بالإضافة إلى ذلك ، 1. لا يزال يحدث ، مما تسبب في أخطاء الخادم ، وانخفاض الأداء للجميع.

الحل الآخر هو مراقبة عناوين IP التي تصل إلى كثير من الأحيان ، أو منعها من جدار الحماية ، أو منعها من الطلب. هذا يمكن أن يحل 2. ويمنع [b] لكن الأداء الذي يتأتى من الفحص لبروتوكولات الإنترنت (IP) عندما تأتي هو أمر هائل ، ومن المحتمل أن يتسبب في المزيد من المشاكل مثل 1. مما كان يتسبب فيه المبرمجون بمفردهم. بالإضافة إلى ذلك ، فإن وجود الشبكات السحابية والامبسبو سبامبوت يجعل التحقق من IP غير مجدية إلى حد ما.

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

أهدافي النهائية مع بعض الحلول:

  1. بيع هذا البند إلى غير scripting البشر.

  2. اجعل الموقع يعمل بسرعة لا تبطئه برامج الروبوت.

  3. لا تشغل المستخدمين "العاديين" بأية مهام لإكمالها لإثبات أنهم بشر.


  1. Provide an RSS feed so they don't eat up your bandwidth.
  2. When buying, make everyone wait a random amount of time of up to 45 seconds or something, depending on what you're looking for exactly. Exactly what are your timing constraints?
  3. Give everyone 1 minute to put their name in for the drawing and then randomly select people. I think this is the fairest way.
  4. Monitor the accounts (include some times in the session and store it?) and add delays to accounts that seem like they're below the human speed threshold. That will at least make the bots be programmed to slow down and compete with humans.

أنت بحاجة إلى تحديد طريقة لجعل البوتات تشتري الأشياء التي هي مبالغ فيها بشكل كبير: wingnut 12mm: 20 $. تعرّف على عدد البرامج التي تكتشفها قبل أن يقرر كتاب السيناريو كتابة الألعاب.

استخدم الأرباح لشراء المزيد من الخوادم ودفع مقابل النطاق الترددي.


أولاً ، دعوني ألخص ما نحتاج إلى القيام به هنا. أدرك أنني أعيد صياغة السؤال الأصلي فقط ، ولكن من المهم أن نحصل على هذا بنسبة 100٪ ، لأن هناك الكثير من الاقتراحات الرائعة التي تحصل على 2 أو 3 من 4 ، ولكن كما سأوضح ، ستحتاج إلى نهج متعدد الأوجه لتغطية جميع المتطلبات.

الشرط 1: التخلص من 'bot laming':

إن "الصفع" السريع في صفحتك الأمامية يضر بأداء موقعك وهو في صميم المشكلة. يأتي "الإيقاع" من كل من بروتوكولات IP الفردية و - من المفترض - من شبكات الروبوت أيضًا. نريد التخلص من الاثنين.

الشرط 2: لا تعبث بتجربة المستخدم:

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

الشرط 3: تجنب "سباق التسلح":

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

الشرط 4: إحباط برامج التنبيه 'التنبيه':

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

حسنًا ، دعونا نستمر إذا استطعنا تلبية جميع المتطلبات الأربعة. أولاً ، كما ذكرت ، لا يوجد إجراء واحد سيفعل الحيلة. سيكون عليك الجمع بين حيلتين لتحقيق ذلك ، وسيكون عليك ابتلاع مضايقتين:

  1. سيطلب من عدد قليل من المستخدمين القفز من خلال الأطواق
  2. عدد صغير من المستخدمين لن يتمكن من الحصول على العروض الخاصة

أدرك أن هذه الأمور مزعجة ، لكن إذا كان بإمكاننا جعل الرقم "الصغير" صغيرًا بما فيه الكفاية ، آمل أن توافق على الإيجابيات التي تفوق السلبيات.

المقياس الأول: الاختناق المرتكز على المستخدم:

هذا واحد هو عدم التفكير ، وأنا متأكد من أنك تفعل ذلك بالفعل. إذا قام مستخدم بتسجيل الدخول ، واستمر في التحديث 600 مرة في الثانية (أو شيء ما) ، فستتوقف عن الاستجابة وتطلب منه أن يبردها. في الواقع ، ربما تخدع طلباته في وقت أقرب من ذلك بكثير ، لكنك تحصل على الفكرة. وبهذه الطريقة ، سيتم حظر / تسجيل برنامج bot-in-bot حالما يبدأ استطلاع الرأي على موقعك. هذا هو الجزء السهل. البوتات غير المصادق هي مشكلتنا الحقيقية ، لذا تابع إليهم:

التدبير الثاني: شكل من أشكال اختناق بروتوكول الإنترنت ، كما اقترح الجميع تقريبا:

بغض النظر عن أي شيء ، سيكون عليك القيام ببعض الاختناق المستند إلى IP لإحباط "bot slamming". نظرًا لأنه يبدو من المهم بالنسبة لك السماح للزوار غير المصادقين (الذين لم يسجلوا الدخول) بالحصول على العروض الخاصة ، فلديك فقط عناوين IP للانتقال في البداية ، وعلى الرغم من أنها ليست مثالية ، إلا أنها تعمل ضد برامج الروبوت أحادية المنفذ. Botnets هي وحش مختلفة ، ولكن سأعود إلى تلك. في الوقت الحالي ، سنفعل بعض الاختناق البسيط للتغلب على روبوتات IP أحادية النيران السريعة.

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

الإجراء الثالث: إخفاء الخنق باستخدام الردود المخزنة مؤقتًا:

ومع اختزان بوتقات IP أحادية النبض السريع ، لا يزال يتعين علينا التعامل مع البوتات البطيئة أحادية الطرف ، أي. البوتات التي تم تعديلها على وجه التحديد إلى "الطيران تحت الرادار" عن طريق تباعد الطلبات بشكل أضيق قليلاً مما يمنع الاختناق.

To instantly render slow single-IP bots useless, simply use the strategy suggested by abelenky: serve 10-minute-old cached pages to all IPs that have been spotted in the last 24 hours (or so). That way, every IP gets one 'chance' per day/hour/week (depending on the period you choose), and there will be no visible annoyance to real users who are just hitting 'reload', except that they don't win the offer.

The beauty of this measure is that is also thwarts 'alarm bots', as long as they don't originate from a botnet.

(I know you would probably prefer it if real users were allowed to refresh over and over, but there is no way to tell a refresh-spamming human from a request-spamming bot apart without a CAPTCHA or similar)

Fourth measure: reCAPTCHA:

You are right that CAPTCHAs hurt the user experience and should be avoided. However, in _one_ situation they can be your best friend: If you've designed a very restrictive system to thwart bots, that - because of its restrictiveness - also catches a number of false positives; then a CAPTCHA served as a last resort will allow those real users who get caught to slip by your throttling (thus avoiding annoying DoS situations).

The sweet spot, of course, is when ALL the bots get caught in your net, while extremely few real users get bothered by the CAPTCHA.

If you, when serving up the 10-minute-old cached pages, also offer an alternative, optional , CAPTCHA-verified 'front page refresher', then humans who really want to keep refreshing, can still do so without getting the old cached page, but at the cost of having to solve a CAPTCHA for each refresh. That is an annoyance, but an optional one just for the die-hard users, who tend to be more forgiving because they know they're gaming the system to improve their chances, and that improved chances don't come free.

Fifth measure: Decoy crap:

Christopher Mahan had an idea that I rather liked, but I would put a different spin on it. Every time you are preparing a new offer, prepare two other 'offers' as well, that no human would pick, like a 12mm wingnut for $20. When the offer appears on the front page, put all three 'offers' in the same picture, with numbers corresponding to each offer. When the user/bot actually goes on to order the item, they will have to pick (a radio button) which offer they want, and since most bots would merely be guessing, in two out of three cases, the bots would be buying worthless junk.

Naturally, this doesn't address 'alarm bots', and there is a (slim) chance that someone could build a bot that was able to pick the correct item. However, the risk of accidentally buying junk should make scripters turn entirely from the fully automated bots.

Sixth measure: Botnet Throttling:

[تم الحذف]

Okay............ I've now spent most of my evening thinking about this, trying different approaches.... global delays.... cookie-based tokens.. queued serving... 'stranger throttling'.... And it just doesn't work. It doesn't. I realized the main reason why you hadn't accepted any answer yet was that noone had proposed a way to thwart a distributed/zombie net/botnet attack.... so I really wanted to crack it. I believe I cracked the botnet problem for authentication in a different thread , so I had high hopes for your problem as well. But my approach doesn't translate to this. You only have IPs to go by, and a large enough botnet doesn't reveal itself in any analysis based on IP addresses.

So there you have it : My sixth measure is naught. لا شيئ. Zip. Unless the botnet is small and/or fast enough to get caught in the usual IP throttle, I don't see any effective measure against botnets that doesn't involve explicit human-verification such as CAPTHAs. I'm sorry, but I think combining the above five measures is your best bet. And you could probably do just fine with just abelenky's 10-minute-caching trick alone.


إننا نستخدم حاليًا أحدث جيل من موازنات تحميل BigIP من F5 للقيام بذلك. يتميز برنامج BigIP بميزات متقدمة لإدارة حركة المرور والتي يمكنها التعرف على الكاشطات والبوتات بناءً على التردد وأنماط الاستخدام حتى من بين مجموعة من المصادر وراء عنوان IP واحد. ويمكنه عندئذٍ خنق هذه العناصر أو تقديمها لمحتوى بديل أو ببساطة تمييزها برؤوس أو ملفات تعريف ارتباط حتى يمكنك التعرف عليها في شفرة التطبيق.


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

أعتقد أن هناك حاجة إلى عقلية مختلفة

  • لا تحاول إيقاف برامج الروبوت من استخدام موقعك
  • لا تذهب للحصول على الإصلاح الذي يعمل على الفور ، تلعب لعبة طويلة

أدخل في عقلية أنه لا يهم ما إذا كان عميل موقعك هو إنسان أو بوت ، وكلاهما يدفع للعملاء فقط ؛ لكن للمرء ميزة غير عادلة على الآخر. يمكن لبعض المستخدمين الذين ليس لديهم الكثير من الحياة الاجتماعية (الناسك) أن يكونوا مزعجين لمستخدمي موقعك الآخرين كروبوتات.

سجّل الوقت الذي تنشر فيه عرضًا ووقت اختيار الحساب لشرائه.

يمنحك ذلك سجلاً لسرعة شراء العميل للأشياء.

قم بتغيير الوقت الذي تنشر فيه العروض.

على سبيل المثال ، لديك نافذة لمدة 3 ساعات تبدأ في وقت غامض من اليوم (منتصف الليل؟) ستقوم فقط برامج الروبوت والنساخ باستمرار تحديث الصفحة لمدة 3 ساعات فقط للحصول على طلب في غضون ثوان. لا تختلف أبدًا عن الوقت الأساسي ، بل حجم النافذة فقط.

مع مرور الوقت ستظهر صورة.

01: يمكنك معرفة الحسابات التي تشتري المنتجات بانتظام في غضون ثوانٍ من البث المباشر. مما يشير إلى أنها قد تكون روبوتات.

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

الآن ، بدلاً من إيقاف برامج التتبع من استخدام موقعك ، تتوفر لديك معلومات كافية لإخبارك بالحسابات التي تستخدمها بالتأكيد برامج التتبع ، والحسابات التي يُرجح استخدامها من قبل النساك. ما تفعله بهذه المعلومات متروك لك ، ولكن يمكنك بالتأكيد استخدامه لجعل موقعك أكثر إنصافًا للأشخاص الذين لديهم حياة.

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

أوامر العمليات في قائمة الانتظار:

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

  1. تم وضع طلبك وهو في طابور.
  2. تمت معالجة طلبك.
  3. لقد تم إرسال طلبك.

يعتقد المستخدمون أنهم في طابور عادل. قم بمعالجة قائمة انتظارك كل ساعة حتى يواجه المستخدمون العاديون طابورًا ، حتى لا يثير الشك. أوامر العملية فقط من حسابات bot و hermit بمجرد أن تكون في قائمة الانتظار لـ "متوسط ​​وقت الطلب البشري + × ساعات". تخفيض فعال لبرامج الروبوت.


سيكون الحل الذي أقوم به هو جعل إلغاء الشاشة عديم القيمة عن طريق وضع تأخير لمدة 10 دقائق تقريبًا لـ 'bots و scripts.

إليك كيف سأقوم بذلك:

  • سجل وتعرف على أي ضارعين متكررين.

لست بحاجة إلى تسجيل كل عنوان IP على كل نتيجة. فقط تتبع واحدة من كل 20 زيارة أو نحو ذلك. سيظل المجرم المتكرر يظهر في تتبع عشوائي عشوائي.

  • احتفظ بذاكرة مؤقتة لصفحتك منذ حوالي 10 دقائق.

  • عندما يضرب موقع / bot تكرارًا موقعك ، اعطهم الصفحة المخبأة القديمة التي تبلغ مدتها 10 دقائق.

لن يعلموا على الفور أنهم يحصلون على موقع قديم. سيكونون قادرين على كشطه ، وكل شيء ، لكنهم لن يفوزوا في أي سباقات ، لأن "الناس الحقيقيين" سيكون لديهم 10 دقائق.

فوائد:

  • لا توجد مشكلات أو مشكلات للمستخدمين (مثل اختبار CAPTCHA).
  • نفذت بالكامل على جانب الخادم. (لا الاعتماد على جافا سكريبت / فلاش)
  • يجب أن يكون عرض صفحة قديمة مخزنة مؤقتًا أقل أداءً من الصفحة المباشرة. يمكنك في الواقع تقليل الحمل على الخوادم الخاصة بك بهذه الطريقة!

عيوب

  • يتطلب تتبع بعض عناوين IP
  • يتطلب الحفاظ على ذاكرة تخزين مؤقت للصفحات القديمة والحفاظ عليها.

ما رأيك؟


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

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

ما زالت تبيعها بسرعة كبيرة ، لكني أعتقد أن الحل جيد - إعادة تقييم المشكلة وتغيير المعايير أدى إلى استراتيجية ناجحة حيث لم تكن الحلول التقنية الدقيقة موجودة.

يعتمد نموذج العمل بالكامل على "يأتي أولاً ، يخدم أولاً". لا يمكنك فعل ما تفعله المحطات الإذاعية (لم تعد تجعل المتصل الأول هو الفائز ، فهي تجعل المتصل الخامس أو العشرين أو الثالث عشر هو الفائز) - لا يتطابق مع ميزتك الأساسية.

لا ، لا توجد طريقة للقيام بذلك دون تغيير تجربة الطلب للمستخدمين الحقيقيين.

لنفترض أنك نفذت كل هذه التكتيكات. إذا قررت أن هذا أمر مهم ، فسأُحضر فقط 100 شخص للعمل معي ، وسنقوم ببناء برنامج للعمل على أجهزة الكمبيوتر المنفصلة المائة لدينا ، وضرب موقعك 20 مرة في الثانية (5 ثوانٍ بين عمليات الوصول لكل مستخدم / ملف تعريف الارتباط / حساب / عنوان IP).

لديك مرحلتين:

  1. مشاهدة الصفحة الأولى
  2. تنظيم

لا يمكنك وضع علامة "captcha blocking # 1" - التي ستفقد العملاء الحقيقيين ("ماذا؟ يجب علي حل اختبار CAPTCHA في كل مرة أريد أن أرى أحدث صيحات الموضة؟!؟").

لذا فإن مجموعتي الصغيرة تشاهد ، يتم ضبطها معًا بحيث نحصل على 20 شيكًا في الثانية ، وأي شخص يرى التغيير ينبه جميع الآخرين (تلقائيًا) ، الذين سيقومون بتحميل الصفحة الأمامية مرة أخرى ، واتباع رابط الطلب ، وتنفيذ المعاملة ( والذي قد يحدث أيضًا تلقائيًا ، ما لم تنفذ اختبار captcha وتغييره لكل عملية wootoff / boc).

يمكنك وضع علامة captcha أمام # 2 ، وفي حين أنك تكره القيام بذلك ، قد تكون هذه هي الطريقة الوحيدة للتأكد من أنه حتى إذا شاهدت bots الصفحة الأولى ، فإن المستخدمين الحقيقيين يحصلون على المنتجات.

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

أولاً ، تخلص من البوتات البسيطة

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

من المفترض أن يؤدي ذلك إلى انخفاض عدد الزيارات بشكل ملحوظ وتغيير الأساليب التي يستخدمها مستخدمو برنامج الروبوت.

الثانية ، جعل الخادم بسرعة فائقة.

أنت حقاً لا تريد سماع هذا ... لكن ...

أعتقد أن ما تحتاجه هو حل مخصص بالكامل من الأسفل إلى الأعلى.

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

تعتبر Apache و lighthttpd وغيرها وسيلة رائعة لكونك مرنًا ، ولكنك تدير موقعًا إلكترونيًا ذا هدف واحد ، وتحتاج حقًا إلى أن تكون قادرًا على القيام بأكثر مما تستطيع الخوادم الحالية القيام به (سواء في التعامل مع حركة المرور أو في مكافحة البوتات بشكل مناسب ).

من خلال تقديم صفحة ويب ثابتة إلى حد كبير (يتم تحديثها كل 30 ثانية أو أكثر) على خادم مخصص ، يجب ألا تكون قادرًا على التعامل مع عدد الطلبات وعدد الزيارات بنسبة 10 أضعاف (لأن الخادم لا يفعل أي شيء بخلاف الحصول على الطلب ، والقراءة الصفحة من الذاكرة في المخزن المؤقت TCP / IP) ولكنه سيعطيك أيضًا الوصول إلى المقاييس التي قد تساعدك على إبطاء سرعة السير. على سبيل المثال ، من خلال ربط عناوين IP ، يمكنك ببساطة حظر أكثر من اتصال في الثانية لكل عنوان IP. لا يمكن للإنسان أن يخطو أسرع من ذلك ، وحتى الأشخاص الذين يستخدمون نفس عنوان NAT الخاص بـ NATed لن يتم حظره إلا بشكل متكرر. كنت تريد أن تفعل كتلة بطيئة - ترك الاتصال وحده لمدة ثانية كاملة قبل إنهاء الجلسة رسميا. هذا يمكن أن تغذي جدار الحماية لإعطاء كتل طويلة الأجل لمخالفي الفظاعة خاصة.

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

استنتاج

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

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

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

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

في كل مرة أفكر فيها في "حسنًا ، ماذا عن القيام بذلك ..." يمكنني دائمًا مواجهته بإستراتيجية بوت مناسبة.

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

جعل الخوادم سريعة ، وضع reCaptcha (الوحيد الذي وجدته لا يمكن خداعه بسهولة ، لكنه ربما يكون بطيئًا جدًا للتطبيق) على صفحة الطلب ، وفكر في طرق لتغيير النموذج قليلًا المستخدمين العاديين لديهم فرصة جيدة كمستخدمي الروبوت.

-Adam


لذا يبدو أن المشكلة حقيقية: يريد البوتات "حقيبتها" لأنها تحتوي على قيمة عالية متصورة بسعر منخفض متصور. تقدم أحيانًا هذا العنصر وتنتظر البوتات لمعرفة ما إذا كان متاحًا ثم يشترون العنصر.

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

أولا ، دائما تقديم "حقيبة" س حماقة ".

ثانيا ، تأكد من أن حماقة عادة ما تكون حماقة.

الثالثة ، تدوير هراء في كثير من الأحيان.

بسيط ، أليس كذلك؟

ستحتاج إلى دائم "لماذا حماقة لدينا في بعض الأحيان حماقة؟" الرابط بجوار العرض لشرح للإنسان ما يجري.

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

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

هيك ، قد يكون عملاؤك المنتظمون مسليا لدرجة أنه يمكنك تحويل هذا إلى فوز تسويقي ضخم. ابدأ في نشر كمية سمك المبروك "crap" الذي يتم بيعه. سوف يعود الناس لمجرد مدى صعوبة عض البوتات.

تحديث: أتوقع أن تحصل على عدد قليل من المكالمات في مقدمة الأشخاص الذين يشكون. لا أعتقد أنه يمكنك إيقاف ذلك تمامًا. ومع ذلك ، إذا كان هذا يقتل البوتات ، فيمكنك دائمًا إيقافها وإعادة تشغيلها لاحقًا.


ماذا عن إدخال تأخير يتطلب تفاعلًا بشريًا ، مثل نوع من "لعبة CAPTCHA". على سبيل المثال ، يمكن أن تكون لعبة فلاش صغيرة حيث يجب أن تقوم خلال 30 ثانية بتفجير الكرات المتقلبة وتجنب انفجار الكرات الصلبة (تجنب مشاكل العمى اللوني!). ستعطى اللعبة عددًا عشوائيًا من البذور ، وما ستنقله اللعبة مرة أخرى إلى الخادم ، سيكون إحداثيات وطوابع زمنية للنقاط التي تم النقر عليها ، جنبًا إلى جنب مع البذور المستخدمة.

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

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


نلقي نظرة على هذا المقال من قبل نيد Batchelder هنا . مقالته عن إيقاف spambots ، ولكن يمكن تطبيق نفس الأساليب بسهولة على موقعك.

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

هذه التقنية هي الطريقة التي أمنع بها spambots على هذا الموقع. إنها تعمل. لا تشرح الطريقة الموضحة هنا المحتوى على الإطلاق.

بعض الأفكار الأخرى:

  • إنشاء آلية إشعار تلقائي رسمية (تغذيات RSS؟ Twitter؟) يمكن للأشخاص الاشتراك بها عند طرح المنتج للبيع. هذا يقلل من حاجة الناس لجعل البرامج النصية.
  • غيِّر تقنية التشويش الخاصة بك مباشرةً قبل طرح عنصر جديد للبيع. لذا ، حتى لو استطاع المبرمجون تصعيد سباق التسلح ، فإنهم دائمًا ما يكونون وراءهم ليوم واحد.

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

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

الدوار هو حقل مخفي يستخدم لأشياء قليلة: فهو يجمع معًا عددًا من القيم التي تمنع العبث والاعادة ، ويتم استخدامه لإخفاء أسماء الحقول. الدوار هو تجزئة MD5 من:

  • الطابع الزمني ،
  • عنوان IP للعميل ،
  • معرف الإدخال الخاص بمدونة المدونة التي تم التعليق عليها ، و
  • سر.

إليك كيفية تنفيذ ذلك على WOOT.com:

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

حتى إذا تمكن شخص ما من إعادة بناء البوت بسرعة ، فسيكون جميع المستخدمين الفعليين الآخرين قد قاموا بالفعل بشراء BOC ، وتم حل مشكلتك!

الإستراتيجية الأخرى التي يناقشها هي تغيير تقنية honeypot من وقت لآخر (مرة أخرى ، تغييرها عندما يتم طرح عنصر جديد للبيع):

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

أعتقد أن فكرتي الشاملة هي تغيير تصميم النموذج عند طرح كل عنصر جديد للبيع. أو على الأقل ، غيّره عندما يبدأ بيع BOC جديد.

وهو ما ، بضع مرات / شهر؟

إذا قبلت هذه الإجابة ، فهل ستعطيني ملاحظة عن موعد استحقاقها؟ :)


How do you know there are scripters placing orders?

The crux of your problem is that you can't separate the scripters from the legitimate users and therefore can't block them, so how is it that you know there are scripters at all?

If you have a way to answer this question, then you have a set of characteristics you can use to filter the scripters.


First of all, by definition, it is impossible to support stateless, ie truly anonymous, transactions while also being able to separate the bots from legitimate users.

If we can accept a premise that we can impose some cost on a brand-spanking-new woot visitor on his first page hit(s), I think I have a possible solution. For lack of a better name, I'm going to loosely call this solution "A visit to the DMV."

Let's say that there's a car dealership that offers a different new car each day, and that on some days, you can buy an exotic sports car for $5 each (limit 3), plus a $5 destination charge.

The catch is, the dealership requires you to visit the dealership and show a valid driver's license before you're allowed in through the door to see what car is on sale. Moreover, you must have said valid driver's license in order to make the purchase.

So, the first-time visitor (let's call him Bob) to this car dealer is refused entry, and is referred to the DMV office (which is conveniently located right next door) to obtain a driver's license.

Other visitors with a valid driver's license is allowed in, after showing his driver's license. A person who makes a nuisance of himself by loitering around all day, pestering the salesmen, grabbing brochures, and emptying the complimentary coffee and cookies will eventually be turned away.

Now, back to Bob without the license -- all he has to do is endure the visit to the DMV once. After that, he can visit the dealership and buy cars anytime he likes, unless he accidentally left his wallet at home, or his license is otherwised destroyed or revoked.

The driver's license in this world is nearly impossible to forge.

The visit to the DMV involves first getting the application form at the "Start Here" queue. Bob has to take the completed application to window #1, where the first of many surly civil servants will take his application, process it, and if everything is in order, stamp the application for the window and send him to the next window. And so, Bob goes from windows to window, waiting for each step of his application to go through, until he finally gets to the end and receives his drivere's license.

There's no point in trying to "short circuit" the DMV. If the forms are not filled out correctly in triplicate, or any wrong answers given at any window, the application is torn up, and the hapless customer is sent back to the start.

Interestingly, no matter how full or empty the office is, it takes about the same amount of time to get serviced at each successive window. Even when you're the only person in line, it seems that the personnel likes to make you wait a minute behind the yellow line before uttering, "Next!"

Things aren't quite so terrible at the DMV, however. While all the waiting and processing to get the license is going on, you can watch a very entertaining and informative infomercial for the car dealership while you're in the DMV lobby. In fact, the infomerical runs just long enough to cover the amount of time you spend getting your license.

The slightly more technical explanation:

As I said at the very top, it becomes necessary to have some statefulness on the client-server relationship which allows you to separate humans from bots. You want to do it in a way that doesn't overly penalize the anonymous (non-authenticated) human visitor.

This approach probably requires an AJAX-y client-side processing. A brand-spanking-new visitor to woot is given the "Welcome New User!" page full of text and graphics which (by appropriate server-side throttling) takes a few seconds to load completely. While this is happening (and the visitor is presumably busy reading the welcome page(s)), his identifying token is slowly being assembled.

Let's say, for discussion, the token (aka "driver's license) consists of 20 chunks. In order to get each successive chunk, the client-side code must submit a valid request to the server. The server incorporates a deliberate delay (let's say 200 millisecond), before sending the next chunk along with the 'stamp' needed to make the next chunk request (ie, the stamps needed to go from one DMV window to the next). All told, about 4 seconds must elapse to finish the chunk-challenge-response-chunk-challenge-response-...-chunk-challenge-response-completion process.

At the end of this process, the visitor has a token which allows him to go to the product description page and, in turn, go to the purchasing page. The token is a unique ID to each visitor, and can be used to throttle his activities.

On the server side, you only accept page views from clients that have a valid token. Or, if it's important that everyone can ultimately see the page, put a time penalty on requests that is missing a valid token.

Now, for this to be relatiely benign to the legitimate human visitor,t make the token issuing process happen relatively non-intrusively in the background. Hence the need for the welcome page with entertaining copy and graphics that is deliberately slowed down slightly.

This approach forces a throttle-down of bots to either use an existing token, or take the minimum setup time to get a new token. Of course, this doesn't help as much against sophisticated attacks using a distributed network of faux visitors.


I'm not seeing the great burden that you claim from checking incoming IPs. On the contrary, I've done a project for one of my clients which analyzes the HTTP access logs every five minutes (it could have been real-time, but he didn't want that for some reason that I never fully understood) and creates firewall rules to block connections from any IP addresses that generate an excessive number of requests unless the address can be confirmed as belonging to a legitimate search engine (google, yahoo, etc.).

This client runs a web hosting service and is running this application on three servers which handle a total of 800-900 domains. Peak activity is in the thousand-hits-per-second range and there has never been a performance issue - firewalls are very efficient at dropping packets from blacklisted addresses.

And, yes, DDOS technology definitely does exist which would defeat this scheme, but he's not seeing that happen in the real world. On the contrary, he says it's vastly reduced the load on his servers.


Most purely technical solutions have already been offered. I'll therefore suggest another view of the problem.

As I understand it, the bots are set up by people genuinely trying to buy the bags you're selling. The problem is -

  1. Other people, who don't operate bots, deserve a chance to buy, and you're offering a limited amount of bags.
  2. You want to attract humans to your site and just sell the bags.

Instead of trying to avoid the bots, you can enable potential bag-buyers to subscribe to an email, or even SMS update, to get notified when a sell will take place. You can even give them a minute or two head start (a special URL where the sell starts, randomly generated, and sent with the mail/SMS).

When these buyers go to buy they're in you're site, you can show them whatever you want in side banners or whatever. Those running the bots will prefer to simply register to your notification service.

The bots runners might still run bots on your notification to finish the buy faster. Some solutions to that can be offering a one-click buy.

By the way, you mentioned your users are not registered, but it sounds like those buying these bags are not random buyers, but people who look forward to these sales. As such, they might be willing to register to get an advantage in trying to "win" a bag.

In essence what I'm suggesting is try and look at the problem as a social one, rather than a technical one.

Asaf


My approach would be to focus on non-technological solutions (otherwise you're entering an arms race you'll lose, or at least spend a great deal of time and money on). I'd focus on the billing/shipment parts - you can find bots by either finding multiple deliveries to same address or by multiple charges to a single payment method. You can even do this across items over several weeks, so if a user got a previous item (by responding really really fast) he may be assigned some sort of "handicap" this time around.

This would also have a side effect (beneficial, I would think, but I could be wrong marketing-wise for your case) of perhaps widening the circle of people who get lucky and get to purchase woot.


Stick a 5 minute delay on all product announcements for unregistered users. Casual users won't really notice this and noncasual users will be registered anyhow.


The important thing here is to change the system to remove load from your server, prevent bots from winning the bag of crap WITHOUT letting the botlords know you are gaming them or they will revise their strategy. I don't think there is any way to do this without some processing at your end.

So you record hits on your home page. Whenever someone hits the page that connection is compared to its last hit, and if it was too quick then it is sent a version of the page without the offer. This can be done by some sort of load balancing mechanism that sends bots (the hits that are too fast) to a server that simply serves cached versions of your home page; real people get sent to the good server. This takes the load off the main server and makes the bots think that they are still being served the pages correctly.

Even better if the offer can be declined in some way. Then you can still make the offers on the faux server but when the bot fills out the form say "Sorry, you weren't quick enough" :) Then they will definitely think they are still in the game.


Time-block user agents that make so-many requests per minute. Eg if you've got somebody requesting a page exactly every 5 seconds for 10 minutes, they're probably not a user... But it could be tricky to get this right.

If they trigger an alert, redirect every request to a static page with as little DB-IO as possible with a message letting them know they'll be allowed back on in X minutes.

It's important to add that you should probably only apply this on requests for pages and ignore all the requests for media (js, images, etc).


Write a reverse-proxy on an apache server in front of your application which implements a Tarpit (Wikipedia Article) to punish bots. It would simply manage a list of IP addresses that connected in the last few seconds. You detect a burst of requests from a single IP address and then exponentially delay those requests before responding.

Of course, multiple humans can come from the same IP address if they're on a NAT'd network connection but it's unlikely that a human would mind your response time going for 2mS to 4mS (or even 400mS) whereas a bot will be hampered by the increasing delay pretty quickly.





honeypot