Komut dosyalarının web sitenizi çarpmasını engelleme


489

Bir cevabı kabul ettim, ama ne yazık ki, en kötü durum senaryomuzla sıkıştığımıza inanıyorum: CAPTCHA bok satın alma girişimlerinde herkes . Kısa açıklama: önbellek / web çiftlikleri, isabetlerin izlenmesini imkansız hale getirir ve herhangi bir geçici çözüm (önbelleğe alınmamış bir web işaretçisi gönderme, birleştirilmiş bir tabloya yazma vb.) Siteyi botlardan daha kötü bir şekilde yavaşlatır. Cisco veya benzerlerinden yüksek düzeyde yardımcı olabilecek bazı pahalı donanımlar vardır, ancak CAPTCHA-ing herkes bir alternatifse maliyeti haklı çıkarmak zordur. Daha sonra daha tam bir açıklama yapmaya çalışacağım ve bunu gelecekteki araştırmacılar için temizleyeceğim (diğerleri topluluk wiki olduğu için denemek için bekliyoruz).

Durum

Bu woot.com'daki çanta satışları hakkında. Tasarım yapan Woot'un iştiraki Woot Workshop'un başkanıyım, ürün açıklamalarını, podcast'leri, blog yayınlarını yazıyor ve forumları yönetiyor. CSS / HTML ile çalışıyorum ve diğer teknolojilere çok az aşinayım. Geliştiricilerle yakın çalışıyorum ve buradaki tüm cevapları (ve sahip olduğumuz birçok fikri) konuştum.

Kullanılabilirlik işimin büyük bir parçası ve siteyi heyecan verici ve eğlenceli hale getirmek geri kalanların çoğu. Aşağıdaki üç hedef bu noktada ortaya çıkar. CAPTCHA kullanılabilirliğe zarar verir ve botlar saçmalık satışlarımızın eğlencesini ve heyecanını çalar.

Botlar, Rastgele Crap satışı için ön sayfamızı on kez ikinci bir ekran kazıma (ve / veya RSS'mizi tarama) çarpıyor. Bunu gördükleri anda, oturum açan programın ikinci bir aşamasını tetikler, Birini istiyorum'a tıklar, formu doldurur ve bok satın alır.

Değerlendirme

lc : Stackoverflow ve bu yöntemi kullanan diğer sitelerde, neredeyse her zaman kimliği doğrulanmış (oturum açmış) kullanıcılarla ilgilenirler, çünkü denenmekte olan görev bunu gerektirir.

Woot'ta anonim (oturum açmamış) kullanıcılar ana sayfamızı görüntüleyebilir. Başka bir deyişle, çarpma botları kimlik doğrulaması yapılmayabilir (ve IP adresi dışında esasen izlenemez).

Bu yüzden, a) bu bulut ağı ve spambot zombi çağında oldukça işe yaramaz olan IP'leri taramaya geri dönüyoruz ve b) bir IP adresinden gelen iş sayısı göz önüne alındığında (sorunlardan bahsetmiyorum) statik olmayan IP İSS'leri ve bunu izlemeye çalışmak için olası performans isabetleri).

Oh, ve insanların bizi aramasını sağlamak en kötü senaryo olurdu. Sizi aramasını sağlayabilir miyiz?

BradC : Ned Batchelder'in yöntemleri oldukça havalı görünüyor, ancak bir site ağı için inşa edilen botları yenmek için oldukça sıkı bir şekilde tasarlanmışlar. Bizim sorunumuz botların sitemizi yenmek için özel olarak inşa edilmiş olmasıdır. Bu yöntemlerden bazıları, betikler, bal küpünü göz ardı etmek, form kimlikleri yerine yakındaki etiket adları için ekran kazıma yapmak ve javascript özellikli bir tarayıcı kontrolü kullanmak için botlarını geliştirene kadar kısa bir süre çalışabilir.

 

lc tekrar : "Elbette, hype pazarlama planınızın bir parçası değilse." Evet, kesinlikle öyle. Maddenin göründüğü zamanki sürpriz ve bir tane almayı başarabilirseniz, muhtemelen elde ettiğiniz saçmalıktan çok veya daha önemli. İlk gelen / ilk servisi ortadan kaldıran her şey, saçmalık 'kazanma' heyecanı için zararlıdır.

 

novatrust : Ve ben, birincisi, yeni bot kardeşlerimize hoş geldiniz. Aslında, üçüncü taraf uygulamalarının sitemizi ürün bilgileri için taramasına izin vermek için RSS beslemeleri sunuyoruz, ancak ana site HTML'sinin önünde değil. Eğer doğru şekilde yorumluyorsam, çözümünüz hedef 1'i tamamen feda ederek ve sadece botların saçmalıkların çoğunu satın alacağı gerçeğinden istifa ederek hedef 2'ye (performans sorunları) yardımcı olur. Cevabınızı oyladım, çünkü son paragraf karamsarlığınız bana doğru geliyor. Burada gümüş kurşun yok gibi görünüyor.

Yanıtların geri kalanı genellikle, hem işe yaramaz (botnet / zombiler / bulut ağları ile) hem de zararlı (aynı IP hedeflerinden gelen birçok masumu yakalar) gibi görünen IP izlemeye dayanır.

Başka yaklaşımlar / fikirler var mı? Geliştiricilerim "hadi sadece CAPTCHA yapalım" demeye devam etseler de, umarım tüm gerçek insanlara saçmalıklarımızı isteyen daha az müdahaleci yöntemler vardır.

Orijinal soru

Diyelim ki çok yüksek algılanan değeri olan ucuz bir şey satıyorsunuz ve çok sınırlı bir miktarınız var. Bu ürünü ne zaman satacağınızı kimse bilmiyor. Ve ne sattığınızı görmek için düzenli olarak bir milyondan fazla insan geliyor.

Sonunda, söz konusu ürünü satarken programlı olarak [a] anlamaya çalışan betikler ve botlarla karşılaşırsınız ve [b] ilk satın alanlardan olduklarından emin olun. Bu iki nedenden dolayı berbat:

  1. Siteniz insan olmayanlar tarafından çarpılarak herkes için her şeyi yavaşlatıyor.
  2. Senaryo yazarları ürünü 'kazanır' ve bu da normalin aldatılmasına neden olur.

Görünüşte bariz bir çözüm, kullanıcıların sipariş vermeden önce atlaması için bazı çemberler oluşturmaktır, ancak bununla ilgili en az üç sorun vardır:

  • Kullanıcı deneyimi, CAPTCHA'yı deşifre etmek, kediyi seçmek veya bir matematik problemini çözmek zorunda olduğu için insanlar için berbat.
  • Algılanan fayda yeterince yüksekse ve kalabalık yeterince büyükse, bir grup herhangi bir tweak çevresinde yol bularak silahlanma yarışına yol açar. (Bu özellikle daha basit olan doğrudur; gizli 'yorumlar' formu, form öğelerini yeniden düzenleme, yanlış etiketleme, gizli 'gotcha' metni bir kez çalışacak ve daha sonra bu belirli formu hedeflemek için değiştirilmeleri gerekiyor .)
  • Scriptler tweak'ınızı 'çözemez' olsa bile, ön sayfanızı çarpmalarını ve ardından script'in siparişi manuel olarak doldurması için bir alarm çalmasını engellemez. [A] çözmekten avantaj elde ettikleri göz önüne alındığında, sipariş sayfasına ulaşan ilk insanlar olacağından muhtemelen [b] kazanacaklardır. Ayrıca, 1. yine de, sunucu hatalarına ve herkes için düşük performansa neden olur.

Başka bir çözüm, IP'lerin çok sık vurmasını izlemek, güvenlik duvarından engellemek veya başka şekilde sipariş vermelerini önlemek. Bu 2. çözebilir ve [b] önleyebilir, ancak IP'leri taramaktan kaynaklanan performans çok büyüktür ve büyük olasılıkla 1. betiklerin kendi başlarına neden olduğundan daha fazla soruna neden olur. Ayrıca, bulut ağı ve spambot zombileri olasılığı IP kontrolünü oldukça işe yaramaz hale getirir.

Sipariş formunun bir süre yüklenmesini zorunlu kılan üçüncü bir fikir (örneğin, yarım saniye) hızlı siparişlerin ilerlemesini potansiyel olarak yavaşlatacaktır, ancak yine de, betikler hala zarar vermeyen herhangi bir hızda ilk insanlar olacaktır. gerçek kullanıcılar.

Hedefler

  1. Öğeyi komut dosyası olmayan insanlara satmak.
  2. Sitenin botlar tarafından yavaşlatılmayan bir hızda çalışmasını sağlayın.
  3. 'Normal' kullanıcıları, insan olduklarını kanıtlamak için herhangi bir görevle uğraşmayın.

1
Bence çelişkili hedefleriniz var: Deneyimi olduğu gibi tutmak ancak botlardan kurtulmak. Sanırım birini diğerinin bir kısmını feda etmeden alamazsınız.
max

Bu bir topluluk wiki, bu yüzden bir bıçak almak için çekinmeyin, ama çoğunlukla zaten denedim ve indirimli denemek için bariz şeyler olduğunu düşünüyor olabildiğince açıkça her noktayı kapsamaya çalışıyordu.
Dave Rutledge

Neden sadece tekrarlanan suçluları önbelleklemiyorlar, tekrar tekrar istedikleri sayfayı güncellemiyorlar. IPv4 ve MAC adresleri toplam 32 + 48 bittir. Bu 1 milyon kullanıcı için 10 MB, sorun olmamalı. IPv4 ve MAC kombinasyonu, her türlü kullanıcıyı daha doğru bir şekilde izlemenize yardımcı olmalıdır
John Leidegren

4
Anonim kullanıcıların neden bok satışını görmelerine izin vermeniz gerektiğini gerçekten anlamıyorum. Neden sadece giriş yapan kullanıcılara sunmuyorsunuz? Bunu yaparsanız, bilinmeyen kullanıcıların sayfaya çok sık vurması olmaz ve daha sonra kötü kullanıcıları yasaklayabilirsiniz.
Ryan Guill

1
Bazı insanların burada önemli bir faktörü eksik olduğunu düşünüyorum: Bu botlar giriş yapmak ve satın almak için ayarlanmış. Geçerli bir hesap biliyorlar ve giriş yapabiliyorlar. Ayrıca, woot kullanan gerçek insanlar bir öğenin geleceği dakika orada oturur ve her 2-5 saniyede bir yeniden yüklemek için F5 tuşuna basarlar. Bu, normal normal insan kullanımıdır.
KodlamaWithSpike

Yanıtlar:


229

SO gibi CAPTCHA'lar gibi bir şey uygulamaya ne dersiniz?

Siteyi normal bir şekilde kullanıyorsanız, muhtemelen bir daha görmezsiniz. Aynı sayfayı çok sık yeniden yüklerseniz, birbirini izleyen yorumları çok hızlı bir şekilde yayınlayın veya bir alarmı tetikleyen başka bir şey varsa, bunların insan olduğunu kanıtlayın. Sizin durumunuzda, bu muhtemelen aynı sayfanın sürekli olarak yeniden yüklenmesi, bir sayfadaki her bağlantıyı hızlı bir şekilde izlemesi veya insan olmayacak kadar hızlı bir sipariş formu doldurması olacaktır.

Satırdaki x kez (örneğin, 2 veya 3) kontrol başarısız olursa, IP'ye bir zaman aşımı veya benzeri bir önlem verin. Ardından zaman aşımının sonunda, onları tekrar kontrole geri dökün.


Siteye erişen kayıtlı olmayan kullanıcılarınız olduğundan, devam etmek için yalnızca IP'leriniz var. Her tarayıcıya oturum düzenleyebilir ve isterseniz bu şekilde takip edebilirsiniz. Ve elbette, arka arkaya çok fazla oturumun (yeniden) oluşturulup oluşturulmadığını (bir botun çerezi silmeye devam etmesi durumunda) bir insan kontrolü yapın.

Çok fazla masumun yakalandığı sürece, insan kontrolü sayfasında bir feragatname belirtebilirsiniz: "Bu sayfa, sitemizi aynı yerden çok fazla sayıda anonim kullanıcı görüntülüyorsa da görünebilir. bu." (İfadeyi uygun şekilde ayarlayın.)

Ayrıca, X kullanıcılarının aynı sayfaları bir IP'den aynı anda yüklemesi ihtimali nedir? Yüksekse, belki bot alarmınız için farklı bir tetik mekanizmasına ihtiyacınız vardır.


Düzenleme: Başka bir seçenek, çok kez başarısız olursa ve onları engellemek ve kişisel olarak bloğu kaldırmak için onları ARAMAK yapmak, ürünün talebi konusunda eminiz.

İnsanları aramak asinine benzer bir önlem gibi gözüküyor, ancak bilgisayarın arkasında bir yerde bir insan olmasını sağlıyor . Anahtar, bloğun sadece bir bot olmadıkça neredeyse hiç olmaması gereken bir durum için yerinde olmasını sağlamaktır (örneğin, arka arkaya birden fazla kez başarısız olun). Sonra insan etkileşimini KUVVETLER - telefonu almak için.

Beni aramasını sağlamanın yorumuna cevaben, burada bu ödünleşmenin olduğu açıktır. Kullanıcılarınızın satışa çıktıklarında birkaç telefon aramasını kabul etmelerini sağlamak konusunda yeterince endişeli misiniz? Bir ürünün insan kullanıcılara ulaşması konusunda bu kadar endişeliysem, bu kararı vermeliydim, belki de süreçteki zamanımın (küçük) bir kısmını feda etmeliydim.

Botların sitenizi üst el / slam almasına izin vermemeye kararlı olduğunuz için, telefonun iyi bir seçenek olabileceğine inanıyorum. Ürününüzden kar elde etmediğim için, bu çağrıları almakla ilgilenmiyorum. Bu kârın bir kısmını paylaşır mıydınız, ancak ilgilenebilirim. Bu sizin ürününüz olduğundan, ne kadar önemsediğinize ve buna göre uyguladığınıza karar vermelisiniz.


Bloğu serbest bırakmanın diğer yolları o kadar etkili değildir: bir zaman aşımı (ancak sitenizi tekrar durduktan sonra durulayın, tekrarlayın), uzun bir zaman aşımı (ürününüzü satın almaya çalışan bir insan olsaydı, SOL ve çek başarısız olduğu için cezalandırılır), e-posta (botlar tarafından kolayca yapılabilir), faks (aynı) veya salyangoz postası (çok uzun sürer).

Elbette, her zaman aşımı aldıklarında IP başına zaman aşımı süresini artırabilirsiniz. Sadece gerçek insanları istemeden cezalandırmadığınızdan emin olun.


13
Google aynı yaklaşımı kullanır ve devam etmek için yalnızca IP adresleri vardır. Sık sık işyerinde, aynı IP adresinden bot benzeri davranışlar gördükleri için Google'da arama yapmadan önce bir CAPTCHA alırım. Bu yaklaşımın (bot benzeri davranışlardan sonra CAPTCHA) alacağınız en iyisi olduğunu düşünüyorum.
Ross

7
Google'ın daha önce bir CAPTCHA istemesini istedim, ama bu benim hatamdı - Onları neredeyse özdeş meblağlar yapan bir hesap makinesi olarak kullanıyordum.
Marcus Downing

CAPTCHA seçeneği bana bir kazanan gibi geliyor. Botları sert bir şekilde incitiyorsunuz ve iyi dengelenmişse asla meşru kullanıcılar yolunuza girmemelisiniz.
xan

İnsanları kilitlemek ve telefon görüşmesi kullanmak yerine cur92Siva@site.com gibi geçici bir e-posta adresi oluşturabilir, ancak ön kısmı bir resimle oluşturabilir misiniz?
Sam

Botlar sisteme alışmadıkça ve e-posta adresini ekran kazımadığı sürece bu da işe yarayabilir. Telefon görüşmesi ile asıl nokta, aslında insan etkileşimini zorlaması ve kullanıcının kendilerini doğrudan sesleriyle açıklamasını gerektirmesidir. Bot sahipleri muhtemelen bunu yapmak istemiyorlar.
Ic.

193

Botların büyük çapta overpriced şeyler satın almanın bir yolunu bulmanız gerekir: 12mm kanat somunu: 20 $. Senaryo yazarları oyun oynadığınıza karar vermeden önce kaç botun yakalandığını görün.

Daha fazla sunucu satın almak ve bant genişliği için ödeme yapmak için karı kullanın.


12
Daha sonra öğeleri iade ederse veya ters ibrazda bulunurlarsa ne olur? Bu size maliyet getirebilir ve ters ibrazlar kredi kartı işlemcileriyle işinize zarar verebilir. Botlar da çalıntı kartlar kullanıyor olabilir, ancak daha yüksek miktarlara daha sık itiraz edileceğinden ters ibraz düzeyini artırabilir.
Tai Kare

13
Onları şarj etmeyin, ancak özellikle ürünü satın almaya çalışmak için botlar olarak işaretleyin. Herhangi bir vücut bir fon eşyası satın alırsa, onları bir bot olarak işaretleyin ve izin vermeyin. Muhtemelen birkaç saat kilitleyebilirsin.
Kibbee

4
Bu sadece komedi değeri vardır, sen sadece woot kazıma daha fazla beceriye sahip olur ve onu yırttı çünkü size gerçek sorunlara neden bir script-kiddie öfke kadar.
MattBelanger

2
Senaryo kiddie sinirlenirse, onları etiketlemeniz ve kolluk kuvvetlerine teslim etmeniz için kendilerini yeterince gösterebilirler.
Jacco

9
sqook: bu bir teknoloji çözümü değil, gerçek bir dünya çözümü. Bankalara silahlı güvenlik görevlileri koymak da aynı şeydir. Sert burunlu gibi görünebilir, ama dolandırıcılara da öyle, bu yüzden sert burunlu olun. Duruncaya kadar acıttığı yere zarar verin.
Christopher Mahan

162

Benim çözümüm, botlar ve senaryolar için yaklaşık 10 dakikalık bir gecikme koyarak ekran kazımayı değersiz hale getirmektir.

İşte böyle yapardım:

  • Tekrarlanan isabetleyicileri günlüğe kaydedin ve tanımlayın.

Her isabette her IP adresini kaydetmenize gerek yoktur. Her 20 vuruştan yalnızca birini takip edin. Tekrar eden bir suçlu, rasgele dağıtılmış bir takip takibinde görünmeye devam edecektir.

  • Sayfanızın önbelleğini yaklaşık 10 dakika önce saklayın.

  • Bir tekrar vurucu / bot sitenize geldiğinde, onlara 10 dakikalık önbelleğe alınmış sayfayı verin.

Eski bir site aldıklarını hemen bilmeyecekler. Onu ve her şeyi kazıyabilecekler, ancak artık yarış kazanamayacaklar, çünkü "gerçek insanlar" 10 dakikalık bir başlangıç ​​yapacak.

Yararları:

  • Kullanıcılar için güçlük veya sorun yok (CAPTCHA'lar gibi).
  • Sunucu tarafında tamamen uygulanır. (Javascript / Flash'a güvenilmez)
  • Daha eski, önbelleğe alınmış bir sayfayı sunmak, canlı bir sayfadan daha az performans yoğun olmalıdır. Aslında sunucularınızdaki yükü bu şekilde azaltabilirsiniz!

Dezavantajları

  • Bazı IP adreslerinin izlenmesini gerektirir
  • Eski sayfaların önbelleğini tutmayı ve korumayı gerektirir.

Ne düşünüyorsun?


1
Lanet olsun. Sadece bir buçuk saatini woot için kendi beş vektör şemamı yazdım ve beşinci karşı önlemim (botnet gaz kelebeği) üzerinde uzun ve sert düşündükten sonra yenilgiyi kabul etmek zorunda kaldım. Çalışmıyor. Ve saat süren çözümümün geri kalanı - bu, bu. abelenky, şapkamı sana takıyorum
Jens Roland

7
Bunun üzerine inşa etmek için: IP'leri bir bellek içi LRU sayma karmasına yerleştirin (her IP geri geldiğinde artırın ve en üste itin). Ters IP bilgisi, etkinlik, resim / js / çerez indirmelerine dayalı buluşsal yöntemler ekleyin. Yanıtınızı saldırının ne kadar kötü olduğuna göre ölçeklendirerek yanlış negatiflerin sonuçlarını en aza indirin.
SquareCog

1
(devam :) Ve tekniğim kimseyi kapatmıyor / yasaklamıyor. Sadece onlara gecikmeli bilgi verir. Ofisteki hiç kimse bir ödül kazanamaz, ancak bu müşteri hizmetleri / erişilebilirlik bakış açısından pek bir sorun oluşturmaz.
abelenky

18
@bruceatk: Onlara yalnızca özel bir bot sayfası verirseniz, sonunda sayfayı tespit etmeyi ve normal bir istemciyi daha doğru bir şekilde taklit etmeyi öğreneceklerdir. Eski bir sayfa vererek, eski verileri aldıklarına dair HİÇBİR FİKİR olmayacaktır. Eski veriler meşrudur! Bu sadece yarışma / yarış amaçları için işe yaramaz.
abelenky

1
Fikrimi onaylayanlara çok teşekkürler. Ödül bitmiş olsa da, bu fikrin uygulanması bir captcha'dan daha kolay, insanları taciz etme olasılığı daha düşük ve botları folyolama olasılığı daha fazla. Umarım birisi bunu bazı web sitelerinde dener.
abelenky

54

Ned Batchelder'in bu makalesine bir göz atın . Makalesi spambotları durdurmakla ilgili, ancak aynı teknikler sitenize kolayca uygulanabilir.

İnsanların kendilerini tanımasını sağlayarak botları durdurmak yerine, başarılı bir yazı yapmalarını zorlaştırarak veya istemeden kendilerini bot olarak tanımlamalarını sağlayarak botları durdurabiliriz. Bu, yükü insanlardan kaldırır ve yorum formunu görünür istenmeyen posta önlemlerinden arındırır.

Bu teknik, bu sitedeki spambotları nasıl önlerim. İşe yarıyor. Burada açıklanan yöntem içeriğe hiç bakmıyor.

Diğer bazı fikirler:

  • Ürününüz satışa sunulduğunda kişilerin abone olabileceği resmi bir otomatik bildirim mekanizması (RSS feed'i? Twitter?) Oluşturun . Bu , insanların komut dosyası oluşturma ihtiyacını azaltır .
  • Yeni bir ürün satışa sunulmadan hemen önce gizleme tekniğinizi değiştirin . Bu yüzden senaryolar silahlanma yarışını tırmandırabilirse bile, her zaman bir gün geride kalırlar.

EDIT: Tamamen açık olmak gerekirse, Ned'in yukarıdaki makalesinde, bir YİD'in sipariş vermek için formlardan geçmesini önleyerek öğelerin otomatik SATIN ALINMASININ önlenmesine yönelik yöntemler açıklanmaktadır. Teknikleri, bir Bandoleer of Carrots'un ne zaman satışa çıktığını belirlemek için botların ana sayfayı ekran kazımalarını önlemek için yararlı olmaz. Bunu önlemek gerçekten mümkün değil.

Ned'in stratejilerinin etkinliği hakkındaki yorumlarınızla ilgili olarak: Evet, honeypot'ları tartışıyor, ancak bunun en güçlü stratejisi olduğunu düşünmüyorum. SPINNER hakkındaki tartışması , makalesinden bahsetmemin asıl nedenidir. Özür dilerim orijinal yazımda daha açık bir ifade vermedim:

Dönücü, birkaç şey için kullanılan gizli bir alandır: kurcalamayı ve tekrarları önleyen bir dizi değeri bir araya getirir ve alan adlarını gizlemek için kullanılır. Spinner, aşağıdakilerin bir MD5 karmasıdır:

  • Zaman damgası,
  • Müşterinin IP adresi,
  • Yorum yapılan blog girişinin giriş kimliği ve
  • Bir sır.

Bunu WOOT.com'da şu şekilde uygulayabilirsiniz:

Her yeni ürün satışa çıktığında, karma işleminin bir parçası olarak kullanılan "gizli" değeri değiştirin. Bu, birisi öğelerin otomatik olarak satın alınması için bir YİD tasarlayacaksa, yalnızca bir sonraki ürün satışa çıkana kadar çalışacağı anlamına gelir !

Birisi botunu hızlı bir şekilde yeniden inşa edebilse bile, diğer tüm gerçek kullanıcılar zaten bir BOC satın almış olacak ve probleminiz çözüldü!

Diye tartışır diğer strateji etmektir değiştirmek zaman (yeni bir öğe satışta gidince yine değiştirin) zaman bal küpü tekniği:

  • Görüntülenecek alanları veya içeren bir öğeyi ayarlamak için CSS sınıflarını kullanın (tabii ki rastgele): none.
  • Alanları sayfanın arka planıyla aynı (veya çok benzeyen) renklendirin.
  • Bir alanı sayfanın görünür alanından çıkarmak için konumlandırmayı kullanın.
  • Bir öğeyi içerdiği bal küpü alanını gösteremeyecek kadar küçük yapın.
  • Alanları görünür bırakın, ancak onları belirsiz bir elemanla örtmek için konumlandırma kullanın.
  • Bir botun tam Javascript motoruna sahip olmasını gerektiren bu değişikliklerden herhangi birini uygulamak için Javascript kullanın.
  • Honeypot'ları diğer alanlar gibi göstermeye bırakın, ancak insanlara onlara hiçbir şey girmemelerini söyleyin.

Sanırım genel fikrim, her yeni ürün satışa çıktığında FORM TASARIMINI DEĞİŞTİRMEK. Veya LEAST'ta, yeni bir BOC satışa çıktığında değiştirin.

Hangisi, ayda birkaç kez?

Bu yanıtı kabul ederseniz, bir sonraki yanıtın ne zaman yapılacağını bana bildirir misiniz? :)


RSS için +1. Meşru kullanıcıların ödüllendirilmesini sağlayın.
Marcus Downing

RSS iyi bir çözüm gibi görünüyor, ancak bu sitenin tahmin ettiğim reklam gelirine zarar verebilir mi?
TM.

1
"Dönücü" kavramını tam olarak anlamıyorum. Bu sadece bir HTML içine yerleştirilen <form>ve gönderildikten sonra gönderilen fazladan bir veri parçası mı? Çünkü bir bot bunu kolayca kazıyabilir.
Ponkadoodle

44

S: Komut dosyalarının sitenizi saniyede yüzlerce kez çarpmasını nasıl önlersiniz?
C: Yapmıyorsun. Harici aracılar tarafından bu davranışı önlemenin bir yolu yoktur .

Gelen talepleri analiz etmek ve sezgisel olarak kimin insan olup olmadığını belirlemeye çalışmak için geniş bir teknoloji dizisi kullanabilirsiniz ... ama başarısız olur. Sonunda, hemen değilse.

Tek geçerli uzun vadeli çözüm, siteyi bot dostu olmayacak veya komut dosyaları için daha az çekici olacak şekilde oyunu değiştirmektir .

Bunu nasıl yaptın? Bu farklı bir soru! ;-)

...

Tamam, yukarıda bazı seçenekler verildi (ve reddedildi). Sitenizi çok iyi tanımıyorum, sadece bir kez inceledim, ancak insanlar resimlerdeki metni okuyabildiğinden ve botlar bunu kolayca yapamadığı için duyuruyu bir resim olarak değiştirin. CAPTCHA değil , sadece bir resim -

  • sayfa istendiğinde (elbette önbelleğe alınmış) resmi oluştur
  • görüntü kaynak adını aynı tut, böylece oyunu kaybetmezsin
  • çoğu zaman resmin içinde normal metin bulunur ve satır içi HTML sayfasının bir parçası olarak görünecek şekilde hizalanır
  • oyun 'açık' olduğunda görüntü duyuru metnine dönüşür
  • duyuru metni ödülü almak için manuel olarak girilmesi gereken bir url ve / veya kodu gösterir . İsterseniz kodu CAPTCHA, ancak bu muhtemelen gerekli değildir.
  • ek güvenlik için kod, istek / IP / aracı için özel olarak oluşturulan bir kerelik bir belirteç olabilir, böylece tekrarlanan istekler farklı kodlar oluşturur. Veya isteğe bağlı oluşturma çok vergilendiriliyorsa, bir grup rastgele kodu (bir defalık pad) önceden oluşturabilirsiniz.

Buna yanıt veren gerçek kişilerin zaman denemelerini çalıştırın ve yanıtları bu sürenin yarısından (diyelim) daha hızlı görmezden gelin ('hata, bir hata oluştu, lütfen tekrar deneyin'). Bu etkinlik ayrıca, geliştiricilere en az bir botun kodu / oyunu anladığına dair bir uyarı vermelidir, bu nedenle kodu / oyunu değiştirme zamanı gelmiştir.

Sadece senaryoların zamanını boşa harcamak için hiçbir bot tetiklemese bile oyunu periyodik olarak değiştirmeye devam edin. Sonunda senaryolar oyunu yormalı ve başka bir yere gitmeli ... umarım ;-)

Son bir öneri: ana sayfanız için bir istek geldiğinde, onu bir sıraya koyun ve istekleri ayrı bir işlemde sırayla yanıtlayın (bunu yapmak için web sunucusunu kesmek / genişletmek zorunda kalabilirsiniz, ancak muhtemelen değerli). İlk istek sıradayken aynı IP / aracıdan başka bir istek gelirse, yoksayın. Bu, yükü botlardan otomatik olarak atmalıdır.

DÜZENLEME: başka bir seçenek, görüntülerin kullanımının yanı sıra, al / satın al metnini doldurmak için javascript kullanmaktır; botlar javascript'i nadiren yorumlar, bu yüzden görmezler


1
"Varsayılan metin" de değiştiğinden emin olurdum. Bu, kazıma uygulamasının görüntüyü önceki bir görüntüyle karşılaştırmasını ve önemli bir değişiklik beklemesini önleyecektir. +1. İyi fikir.
Frank Krueger

1
"Son öneri" de değişiklik: Aynı adresten önceki bir istek beklemedeyken bir adresten ikinci bir istek gelirse, ilk isteği atın ve ikinci isteği sıraya koyun. Bu, sayfanın yüklenmesine izin vermek yerine siteyi çekiçlemek için bir ceza görevi görecektir.
Dave Sherohman

@ [Frank Krueger]: Bunu ima ettiğimi sanıyordum, ama yeniden okuduktan sonra sanmıyorum - işaret ettiğin için teşekkürler! Varsayılan metin görüntüsünün karşılaştırmalarla uğraşmak için sadece birkaç pikseli değiştirmesi ve / veya botlarla daha fazla karışıklık yaratmak için neredeyse görünmez filigran tarzı metin üretmesi de yararlı olabilir
Steven A. Lowe

@ [Dave Sherohman]: Yapabilirdiniz, ama bu kuyruğun sallanmasına neden olabilir; yükü derhal atmak için yeni talepleri atmak daha iyi olabilir - test / profil oluşturma hangisinin daha iyi olduğunu kesin olarak söyler, ancak iyi bir öneri için teşekkürler!
Steven A. Lowe

Ona temel olarak teslim etmesini söylediğine dayanamıyorum, bunun imkansız olduğunu düşündüğünü biliyorum, ama katılmıyorum. Bir irade varsa, her zaman kesinlikle bir yol vardır. Yenilgiye çok kolay izin vermek gerçekten ilham verici ve üzücüdür, eğer orig posteri okuyorsa, bunu yapmak mümkündür, ancak çözümün trafik günlüklerinin analizinden sonra özel olarak tasarlanması gerekir, mevcut yöntemleri önleyebilir ve henüz önlemek için gelecekteki kanıtlar kullanılmayan yöntemler. Ayrıca JavaScript yeniden, webbrowser kontrolü JavaScript gerçek zamanlı çalışır, başka bir motora gerek yok - Dom ile karışıklık ve kendi JavaScript çalıştırabilirsiniz! Opps
Erx_VB.NExT.Coder

30

Bunun ne kadar mümkün olduğunu bilmiyorum: ... saldırıya devam et.

Botların hangi verileri taradığını bulun. Bok satmadığınızda onlara aradıkları verileri verin. Bunu insan kullanıcıları rahatsız etmeyecek veya karıştırmayacak şekilde yapın. Botlar ikinci aşamayı tetiklediğinde, giriş yaparlar ve BOC yerine 100 $ oda basını satın almak için formu doldururlar. Tabii ki, bu botların özellikle sağlam olmadığını varsayar.

Başka bir fikir, torba satış dönemi boyunca rastgele fiyat düşüşleri uygulamaktır. Sadece 20 $ değerinde olduğunu açıkça belirttiğinizde kim 150 $ için rastgele bir çanta bok satın alır? Aşırı hevesli botlardan başka kimse yok. Ama 9 dakika sonra 35 dolar ... 17 dakika sonra 9 dolar. Ya da her neyse.

Elbette, zombi kralları tepki verebilirdi. Mesele, hatalarını onlar için çok maliyetli hale getirmektir (ve onlarla savaşmak için size ödeme yapmalarını sağlamak).

Tüm bunlar,% 100 tavsiye edilmeyen bazı bot lordlarını kızdırmak istediğinizi varsayar.


Bot lordlarının öfkelenmesinin arzu olduğunu düşünmeyin, ancak burada ilginç bir fikriniz var.
Shawn Miller

7
Katılıyorum ve bu tekrarlayan fikri, sahte satın alımlar yapmak için botları kandırmaktan hoşlanıyorum. Geri ödeme ve zaten ToS'yi kırdıkları için şikayet edemiyorlar.
Nicholas Flynt

22

Yani sorun gerçekten öyle gözüküyor: botlar "torba 'saçmalıklarını" istiyor çünkü algılanan düşük bir fiyata yüksek algılanan değere sahip. Bazen bu öğeyi ve botların pusuda olduğunu, kullanılabilir olup olmadığını görmek için bekliyor ve sonra öğeyi satın alıyorlar.

Bot sahipleri kâr ediyor (veya potansiyel olarak kar elde ediyor) gibi göründüğü için, hile, onları bok satın almaya teşvik ederek kârsız hale getirmektir .

İlk olarak, her zaman "bag 'o crap" teklif.

İkincisi, bok genellikle bok olduğundan emin olun.

Üçüncü olarak, bok sık sık döndürün.

Basit, değil mi?

Kalıcı bir ihtiyacınız olacak "neden saçmalık bazen saçmalık?" neler olduğunu insanlara açıklamak için teklifin yanındaki bağlantıyı tıklayın.

Bot bok olduğunu ve bokun otomatik olarak satın alındığını gördüğünde, alıcı kırık bir kürdan için 10 dolar ödemiş olduğu için çok üzülecek. Ve sonra boş bir çöp torbası. Ve sonra ayakkabının altından biraz kir var.

Nispeten kısa bir süre içinde bu saçmalıktan yeterince satın alırlarsa (ve bunu neden yaptığınızı açıklayan her yerde büyük feragatnameleriniz varsa), çanta 'o bok ". Eğer bok yeterince sık döndürürseniz, insan müdahalesi bile (bokun bok olmadığından emin olmak için) başarısız olabilir. Heck, belki de botlar çok kısa bir süre rotasyonda olan herhangi bir şeyi fark edecek ve satın almayacaklar, ancak bu, insanların saçma olmayanları satın alacağı anlamına geliyor.

Heck, düzenli müşterileriniz o kadar eğlenebilir ki, bunu büyük bir pazarlama kazancına dönüştürebilirsiniz. "Bok" sazanının ne kadarının satıldığını göndermeye başlayın. İnsanlar botların ne kadar sert ısırıldığını görmek için geri gelecekler.

Güncelleme: Şikayette bulunan kişilerle birkaç görüşme yapabilirsiniz. Bunu tamamen durdurabileceğini sanmıyorum. Ancak, bu botları öldürürse, her zaman durdurabilir ve daha sonra yeniden başlatabilirsiniz.


15
  1. Öğeyi komut dosyası olmayan insanlara satmak.

  2. Sitenin botlar tarafından yavaşlatılmayan bir hızda çalışmasını sağlayın.

  3. 'Normal' kullanıcıları, insan olduklarını kanıtlamak için herhangi bir görevle uğraşmayın.

Muhtemelen bunu duymak istemezsiniz, ancak # 1 ve # 3 birbirini dışlar.

İnternette kimse senin köpek olduğunu bilmiyor

Kimse senin bot olduğunu bilmiyor. Kişinin bir şey yapmasına gerek kalmadan bağlantının diğer ucunda bir insan olup olmadığını anlamanın programlı bir yolu yoktur. Komut dosyalarının / botların web'de bir şeyler yapmasını önlemek, CAPTCHA'ların icat edilmesinin tüm sebebidir. Bu, üzerinde çok fazla çaba harcanmamış yeni bir sorun gibi değil. Bunu yapmanın daha iyi bir yolu olsaydı, gerçek kullanıcılara bir CAPTCHA'nın yaptığı zorlukları içermeyen bir yol olsaydı, herkes zaten kullanıyor olurdu.

Botları sipariş sayfanızdan uzak tutmak istiyorsanız, iyi bir CAPTCHA'nın bunu yapmanın tek yolu olduğu gerçeğiyle yüzleşmeniz gerektiğini düşünüyorum. Rastgele saçmalıklarına olan talep, insanların bunu elde etmek için bu uzunluklara gitmek isteyecek kadar yüksekse, meşru kullanıcılar bir CAPTCHA tarafından ertelenmeyecektir.


+1 isterse, bir captcha onları durdurmayacak ... ve çizgi film için.
Martin

13

Woot'un bu sorunla mücadele etmek için kullandığı yöntem oyunu tam anlamıyla değiştiriyor. Satış için olağanüstü arzu edilen bir eşya sunduklarında, kullanıcıları sipariş etmek için bir video oyunu oynatırlar.

Bu sadece botlarla başarılı bir şekilde savaşmakla kalmaz (otomatik oyunculardan kaçınmak için oyunda kolayca küçük değişiklikler yapabilir veya hatta her satış için yeni bir oyun sağlayabilir), aynı zamanda kullanıcılara yavaşlarken istenen eşyayı "kazanma" izlenimi verir sipariş süreci.

Hala çok hızlı bir şekilde satılıyor, ancak çözümün iyi olduğunu düşünüyorum - sorunu yeniden değerlendirmek ve parametreleri değiştirmek, kesinlikle teknik çözümlerin bulunmadığı başarılı bir stratejiye yol açtı.


Tüm iş modeliniz "ilk gelen, ilk servis edilen" e dayanmaktadır. Radyo istasyonlarının yaptıklarını yapamazsınız (artık ilk arayanı kazanan yapmazlar, 5. veya 20. veya 13. arayanı kazanan yaparlar) - birincil özelliğinizle eşleşmez.

Hayır, gerçek kullanıcılar için sipariş deneyimini değiştirmeden bunu yapmanın bir yolu yoktur.

Tüm bu taktikleri uyguladığınızı varsayalım. Bunun önemli olduğuna karar verirsem, sadece 100 kişinin benimle çalışmasını sağlayacağım, 100 ayrı bilgisayarımızda çalışmak için yazılım geliştireceğiz ve sitenizi saniyede 20 kez (her kullanıcı için erişim arasında 5 saniye / çerez / hesap / IP adresi).

İki aşamanız var:

  1. Ön sayfayı izlerken
  2. Sipariş

# 1'i engelleyen bir captcha koyamazsınız - bu gerçek müşterileri kaybedecektir ("Ne? En son woot'u her görmek istediğimde bir captcha'yı çözmek zorundayım?!?").

Böylece, küçük grubum izliyor, birlikte zamanlanıyor, böylece saniyede yaklaşık 20 kontrol alıyoruz ve değişikliği ilk kim görürse, ön sayfayı bir kez daha yükleyecek, sipariş bağlantısını izleyecek ve işlemi gerçekleştirecek olan diğerlerini (otomatik olarak) uyarıyor. Bu, captcha'yı uygulamadığınız ve her wootoff / boc için değiştirmediğiniz sürece otomatik olarak gerçekleşebilir).

# 2'nin önüne bir captcha koyabilirsiniz ve bunu yapmaktan nefret ederken, botlar ön sayfayı izlese bile gerçek kullanıcıların ürünleri aldığından emin olmanın tek yolu bu olabilir.

Ancak captcha ile bile 100 kişilik küçük grubum hala önemli bir ilk hamle avantajına sahip olacaktı - ve insan olmadığımızı söyleyebilmenin hiçbir yolu yok. Erişimlerimizi zamanlamaya başlarsanız, biraz titreme ekleriz. Hangi bilgisayarın yenileneceğini rastgele seçebiliriz, böylece erişim sırası sürekli değişir - ancak yine de bir insan gibi görünür.

İlk olarak, basit botlardan kurtulun

İstekleri izleyecek uyarlanabilir bir güvenlik duvarına sahip olmanız gerekir ve birisi bariz aptalca bir şey yapıyorsa - aynı IP'de saniyede bir defadan daha fazla tazeleme, ardından bunları yavaşlatmak için taktikler kullanır (paketleri bırak, reddedilen veya 500 hata gönderir, vb.) ).

Bu, trafiğinizi önemli ölçüde düşürmeli ve bot kullanıcılarının kullandığı taktikleri değiştirmelidir.

İkincisi, sunucuyu inanılmaz derecede hızlı yapın.

Bunu gerçekten duymak istemiyorsun ... ama ...

Sanırım ihtiyacınız olan şey aşağıdan yukarıya tamamen özel bir çözüm.

TCP / IP yığını ile uğraşmanıza gerek yoktur, ancak kullanıcı bağlantılarını ilişkilendirmek ve çeşitli saldırılara uygun şekilde tepki vermek için tasarlanmış çok, çok, çok hızlı bir özel sunucu geliştirmeniz gerekebilir.

Apache, lighthttpd, vb. Esnek olmak için mükemmeldir, ancak tek amaçlı bir web sitesi çalıştırırsınız ve her ikisinin de mevcut sunucuların yapabileceğinden daha fazlasını yapabilmeniz gerekir (hem trafiği ele alma hem de botlarla uygun şekilde mücadele etme) ).

Özel bir sunucuda büyük ölçüde statik bir web sayfası (her 30 saniyede bir güncelleme) sunarak, yalnızca isteklerin ve trafiğin 10 katını işleyemezsiniz (çünkü sunucu, isteği almak ve okumaktan başka bir şey yapmaz) sayfadan bellekten TCP / IP arabelleğine), ancak aynı zamanda botları yavaşlatmanıza yardımcı olabilecek metriklere erişmenizi sağlar. Örneğin, IP adreslerini ilişkilendirerek IP başına saniyede birden fazla bağlantıyı engelleyebilirsiniz. İnsanlar bundan daha hızlı gidemezler ve aynı NATed IP adresini kullanan kişiler bile nadiren engellenir. Yavaş bir engelleme yapmak istersiniz - oturumu resmi olarak sonlandırmadan önce bağlantıyı bir saniyeliğine yalnız bırakın. Bu, özellikle korkunç suçlulara daha uzun vadeli bloklar vermek için bir güvenlik duvarına beslenebilir.

Ancak gerçek şu ki, ne yaparsanız yapın, bot tek bir amaç için özel olarak bir insan tarafından inşa edildiğinde, bir insana bir bottan başka bir şey söylemenin bir yolu yoktur. Bot sadece insan için bir vekil.

Sonuç

Günün sonunda, bir insana ve bir bilgisayara ön sayfayı izledikleri için ayrı ayrı söyleyemezsiniz. Botları sipariş adımında durdurabilirsiniz, ancak bot kullanıcıları hala ilk hamle avantajına sahiptir ve hala yönetmek için büyük bir yükünüz vardır.

Basit botlar için blok ekleyebilir, bu da çubuğu yükseltir ve daha az insanı rahatsız eder. Bu yeterli olabilir.

Ancak temel modelinizi değiştirmeden şansınız kalmaz. Yapabileceğiniz en iyi şey, basit vakalarla ilgilenmek, sunucuyu normal kullanıcıların fark etmeyecek kadar hızlı hale getirmesi ve birkaç milyon botunuz olsa bile, istedikleri kadar düzenli kullanıcının alabileceği kadar çok öğe satmasıdır. .

Bir bal küpü kurmayı ve kullanıcı hesaplarını bot kullanıcıları olarak işaretlemeyi düşünebilirsiniz, ancak bunun büyük bir negatif geri tepmesi olacaktır.

Ne zaman "peki, bunu yapmaya ne dersin ..." diye düşünürsem, bunu her zaman uygun bir bot stratejisiyle karşılayabilirim.

Sipariş sayfasına ulaşmak için ön sayfayı bir captcha yapsanız bile ("Bu öğenin sipariş düğmesi pembe parıltılarla mavi, bu sayfada bir yerde") botlar sayfadaki tüm bağlantıları açacak ve hangisi olursa olsun bir sipariş sayfası ile geri. Bunu kazanmanın bir yolu yok.

Sunucuları hızlı hale getirin, sipariş sayfasında bir reCaptcha (kolayca kandırılamayan, ancak muhtemelen uygulamanız için çok yavaş olan) buldum ve modeli biraz değiştirmenin yollarını düşünün normal kullanıcılar bot kullanıcıları kadar iyi bir şansa sahiptir.

-Adam


"Her düşündüğümde" peki, bunu yapmaya ne dersim ... "Her zaman uygun bir bot stratejisiyle karşı koyabilirim" Doğrulama sistemimi tasarlarken aynı sonuca vardım AMA - burada bir fark var beni şu mantıktan şüphe ediyor: Yanlış pozitifler büyük bir sorun değil
Jens Roland

(devamı) Örneğin, burada birkaç gerçek kullanıcı varsa ve özel teklifleri alamıyorsa, bu aslında büyük bir anlaşma değildir (neyi kaçırdıklarını bilmedikleri sürece). Bir yetkilendirme sistemlerinde, bu ise bir anlaşmabozucudur - Kullanıcıların giriş yapma engellenmesinden istemiyoruz
Jens Roland

Bunun anlamı, Woot sistemini 'geleneksel' spambot karşı önlemlerinden daha kısıtlayıcı olacak şekilde tasarlayabilirsiniz ve bundan dolayı botları etkin bir şekilde engelleyebilirsiniz.
Jens Roland

(ancak, şimdi biraz daha düşündüğüm için, dağıtılmış / botnet 'saldırılarını' da engelleyecek şekilde çalışan bir yol düşünemiyorum)
Jens Roland

11

Feragatname: Bu cevap tamamen programlama ile ilgili değildir. Ancak, en başta komut dosyalarının nedenine saldırmaya çalışır.

Başka bir fikir, gerçekten sınırlı miktarda satıcınız varsa, neden ilk gelen ilk hizmet yönteminden değiştirmiyorsunuz? Elbette, yutturmaca pazarlama planınızın bir parçası olmadığı sürece.

Başka birçok seçenek var ve eminim başkaları bazı farklı seçenekleri düşünebilir:

  • bir sipariş kuyruğu (ön sipariş sistemi) - Bazı komut dosyaları hala kuyruğun önünde bulunabilir, ancak bilgileri manuel olarak girmek daha hızlı olabilir.

  • bir çekiliş sistemi (bir tane sipariş etmeye çalışan herkes sisteme girilir) - Bu şekilde komut dosyaları olan kişiler, olmayanlarla aynı şansa sahip olurlar.

  • acele öncelik sırası - Gerçekten algılanan yüksek bir değer varsa, insanlar daha fazla ödeme yapmaya istekli olabilir. Bir sipariş kuyruğu uygulayın, ancak insanların daha fazla ödeme yapmasına izin verin.

  • açık artırma (kredi bunun için David Schmitt'e gider, yorumlar benimdir) - İnsanlar hala son dakikada içeri girmek için komut dosyalarını kullanabilir, ancak sadece fiyatlandırma yapısını değiştirmekle kalmaz, insanlar başkalarıyla savaşmayı bekler . Ayrıca, belirli bir dönemde teklif sayısını kısıtlamak, kullanıcıların bir yetkilendirme kodu için vaktinden önce telefon etmelerini sağlamak gibi şeyler yapabilirsiniz.


1
Teşekkür ederim. Bakın, başkaları olduğunu biliyordum.
Ic.

herhangi bir çekiliş sistemi botun lehine şansını artırmak için aşırı yüklenecek
Andy Dent

Kişi / ev / (fiziksel) adresi başına bir tane ile sınırlarsanız, bu olmaz
lc.

11

Nazi'nin iletişimi ne kadar güvenli olursa olsun, müttefikler genellikle mesajlarını kıracaktı. Botların sitenizi nasıl kullanmasını engellemeye çalışsanız da, bot sahipleri sitenin etrafında bir şekilde çalışacaktır. Bu seni Nazi yaparsa özür dilerim :-)

Farklı bir zihniyetin gerekli olduğunu düşünüyorum

  • Botların sitenizi kullanmasını durdurmaya çalışmayın
  • Hemen çalışan bir düzeltme yapmayın, uzun oyunu oynayın

Sitenizin müşterisinin bir insan mı yoksa bir bot mu olduğu farketmez; her ikisi de yalnızca ödeme yapan müşterilerdir; ancak birinin diğerine karşı haksız avantajı vardır. Sosyal yaşamı (hermits) fazla olmayan bazı kullanıcılar, sitenizin diğer kullanıcıları için botlar kadar rahatsız edici olabilir.

Bir teklifi yayınladığınız zamanı ve bir hesabın onu satın almayı seçtiği zamanı kaydedin.

Bu, müşterinin bir ürünü ne kadar hızlı satın aldığının bir kaydını verir.

Teklifleri yayınladığınız günün saatini değiştirin.

Örneğin, günün belirsiz saatlerinde (gece yarısı?) Başlayan 3 saatlik bir pencereniz olsun, saniyeler içinde sipariş almak için yalnızca botlar ve inekler bir sayfayı 3 saat boyunca sürekli olarak yeniler. Asla temel süreyi değiştirmeyin, sadece pencerenin boyutunu değiştirin.

Zamanla bir resim ortaya çıkacaktır.

01: Hangi hesapların yayınlanmaya başladıktan sonraki birkaç saniye içinde düzenli olarak ürün satın aldığını görebilirsiniz. Botlar olabileceğini önermek.

02: Teklifler için kullanılan zaman penceresine de bakabilirsiniz, eğer pencere 1 saat ise, bazı erken alıcılar insan olacaktır. Bir insan nadiren 4 saat boyunca yenilenir. Geçen süre, pencere süresine bakılmaksızın yayınlama / satın alma arasında oldukça tutarlıysa, bu bir bottur. Yayınlama / satın alma süresi küçük pencereler için kısaysa ve büyük pencereler için uzarsa, bu bir keşiş!

Artık botların sitenizi kullanmasını durdurmak yerine, hangi hesapların botlar tarafından kesinlikle kullanıldığını ve hangi hesapların hermits tarafından kullanılacağını söylemek için yeterli bilgiye sahipsiniz. Bu bilgilerle ne yapacağınız size bağlıdır, ancak sitenizi bir hayatı olan kişiler için daha adil hale getirmek için kesinlikle kullanabilirsiniz.

Bot hesaplarının yasaklanmasının anlamsız olacağını, Hitler'in telefon edilmesine ve "U teknelerinizin pozisyonları için teşekkürler!" Demeye benzediğini düşünüyorum. Her nasılsa, bilgileri hesap sahiplerinin farkına varmayacak şekilde kullanmanız gerekir. Bakalım bir şey hayal edebilir miyim .....

Siparişleri kuyrukta işleme koyma:

Müşteri bir sipariş verdiğinde, siparişlerinin bir kuyruğa yerleştirildiğini bildiren bir onay e-postası alır ve işlendiğinde bilgilendirilir. Amazon'da sipariş / sevkiyat ile bu tür bir şey yaşıyorum ve beni hiç rahatsız etmiyor, günler sonra bana derhal bir e-posta aldığım sırada siparişimin gönderildiğini söyleyen bir e-posta almayı umursamıyorum Amazon kitabı istediğimi biliyor. Sizin durumunuz için bir e-posta olurdu

  1. Siparişiniz verildi ve sırada.
  2. Siparişiniz işleme koyuldu.
  3. Siparişiniz sevk edildi.

Kullanıcılar adil bir sırada olduklarını düşünüyorlar. Sıranızı her 1 saatte bir işleyin, böylece normal kullanıcılar da şüphe uyandırmamak için bir kuyruk yaşar. Bot ve münferit hesaplardan gelen siparişleri, yalnızca "ortalama insan sipariş süresi + x saat" kuyruğuna girdikten sonra işleme koyun. Botları insanlara etkili bir şekilde azaltmak.


Bu ne anlama geliyor? :-)
Peter Morris

Ah teşekkürler :-) Nazi'den bahsediyorum çünkü Bletchley park hakkında İkinci Dünya Savaşı hikayeleriyle çok ilgileniyorum :-) Mesajların nasıl kırıldığı ile ilgili bazı hikayeler, operatörlerin önceki gecenin kodları :-)
Peter Morris

10

Bir API kullanarak fiyat bilgilerini ortaya koyuyorum diyorum. Bu, sezgisel olmayan bir çözümdür, ancak durum üzerinde kontrol sahibi olmanız işe yarar. Web sitesinden biraz daha az işlevsel hale getirmek için API'ya bazı sınırlamalar ekleyin.

Aynı şeyi sipariş için de yapabilirsiniz. İstenen efekti elde edene kadar API işlevselliğinde / performansında küçük değişiklikler deneyebilirsiniz.

IP kontrollerini yenmek için proxy'ler ve botnet'ler vardır. Son derece iyi captcha okuma komut dosyaları vardır. Hindistan'da küçük bir fiyatla captcha'ları yenen işçi ekipleri bile var. Bulabileceğiniz herhangi bir çözüm makul bir şekilde yenilebilir. Ned Batchelder'in çözümleri bile bir WebBrowser denetimi veya bir botnet veya proxy listesiyle birlikte başka bir simüle tarayıcı kullanılarak geçmiş olabilir.


8

Bunu yapmak için şu anda F5'in en yeni nesil BigIP yük dengeleyicilerini kullanıyoruz. BigIP, tek bir IP'nin arkasındaki bir dizi kaynaktan bile olsa, kazıyıcıları ve botları sıklık ve kullanım şekillerine göre tanımlayabilen gelişmiş trafik yönetimi özelliklerine sahiptir. Daha sonra bunları kısıtlayabilir, alternatif içerik sunabilir veya bunları uygulama kodunuzda tanımlayabilmeniz için üstbilgiler veya çerezlerle etiketleyebilir.


Bu önereceğim tam çözüm, özellikle de otomatik azaltma. Kendinizi yuvarlayabilirsiniz, sadece düzenli ila gelişmiş sinyal analizine dayanır.
wds

7

İlk olarak, burada yapmamız gerekeni özetleyeyim. Sadece orijinal soruyu yorumladığımı fark ettim, ama bunu% 100 düzleştirmemiz önemlidir, çünkü 4'ten 2 veya 3'ü doğru alan birçok harika öneri var, ancak göstereceğim gibi, tüm gereksinimleri karşılamak için çok yönlü bir yaklaşım.

Gereksinim 1: 'Bot çarpmasından' kurtulmak:

Ön sayfanızın hızlı ateş 'çarpması' sitenizin performansını zedeliyor ve sorunun özünü oluşturuyor. 'Slamming' hem tek IP botlarından hem de - sözde botnetlerden geliyor. İkisinden de kurtulmak istiyoruz.

Gereksinim 2: Kullanıcı deneyimiyle uğraşmayın:

Bir insan operatöre telefon etmek, bir sürü CAPTCHA veya benzeri bir çözümü çözmek gibi kötü bir doğrulama prosedürü uygulayarak bot durumunu oldukça etkili bir şekilde düzeltebiliriz, ancak bu, her masum uçak yolcunu sadece ince şans için çılgın güvenlik çemberlerinden atlamaya zorlamak gibi olurdu en aptal teröristleri yakalamak. Oh bekleyin - aslında bunu yapıyoruz. Ama eğer bakalım değil woot.com üzerinde yapmak.

Gereksinim 3: 'Silahlanma Yarışı'ndan Kaçınmak:

Bahsettiğiniz gibi, spambot silah yarışına kapılmak istemezsiniz. Bu nedenle, gizli veya karışık form alanları, matematik soruları vb.Gibi basit ayarlamalar kullanamazsınız, çünkü bunlar esasen otomatik olarak algılanabilen ve atlatılabilen belirsiz önlemlerdir.

Gereksinim 4: 'Alarm' botlarını engelleme:

Bu, gereksinimlerinizden en zoru olabilir. Etkili bir insan doğrulama zorluğu yapabilsek bile, botlar ön sayfanızı kirletebilir ve yeni bir teklif olduğunda komut dosyasını uyarabilir. Bu botları da olanaksız hale getirmek istiyoruz. Bu, ilk gereksinimin daha güçlü bir versiyonudur, çünkü botlar performansa zarar veren hızlı yangın talepleri yayınlamakla kalmaz, aynı zamanda kazanmak için scripter'a 'alarm' göndermek için yeterli sayıda tekrarlanan istek bile veremezler. teklif.


Tamam, diyelim ki dört gereksinimin tümünü karşılayabilirsek. İlk olarak, dediğim gibi, hiç kimse hile yapmayacak. Bunu başarmak için birkaç püf noktasını birleştirmeniz gerekecek ve iki sıkıntıyı yutmanız gerekecek:

  1. Kasnaklardan atlamak için az sayıda kullanıcı gerekecektir
  2. Az sayıda kullanıcı özel teklifleri alamayacak

Bunların sinir bozucu olduğunu anlıyorum, ancak 'küçük' rakamı yeterince küçük yapabilirsek, umarım pozitiflerin negatiflerden daha ağır basacağına katılırsınız.

İlk önlem: Kullanıcı tabanlı kısıtlama:

Bu bir beyinsizdir ve eminim zaten yapmışsınızdır. Bir kullanıcı oturum açtıysa ve saniyede 600 kez (veya bir şey) yenilenmeye devam ederse, yanıt vermeyi durdurup ona soğumasını söylersiniz. Aslında, muhtemelen isteklerini bundan daha erken kısırsınız, ancak fikri anlarsınız. Bu şekilde, giriş yapmış bir bot sitenizi sorgulamaya başlar başlamaz yasaklanacaktır. Bu kolay kısmı. Kimliği doğrulanmamış botlar bizim asıl sorunumuz, bu yüzden onlara:

İkinci önlem: Neredeyse herkesin önerdiği gibi bir çeşit IP azaltma:

Ne olursa olsun, 'bot çarpmasını' önlemek için bazı IP tabanlı azaltma yapmanız gerekecek . Önemli görünmektedir beri size (non-giriş yapan) ziyaretçi özel teklifleri almak doğrulanmamış izin vermek, sadece başlangıçta gitmeyi IP'leri var ve onlar mükemmel değiliz, ancak onlar bunu tek bir IP botlara karşı çalışmalarını. Bot ağları farklı bir canavar, ama ben bunlara geri döneceğim. Şimdilik, hızlı ateş eden tek IP botlarını yenmek için bazı basit azaltma yapacağız.

IP denetimini diğer tüm işlemlerden önce çalıştırırsanız, azaltma mantığı için bir proxy sunucusu kullanırsanız ve IP'leri, bir memcached optimize edilmiş ağaç yapısında saklarsanız performans isabeti göz ardı edilebilir.

Üçüncü önlem: Gaz kelebeğinin önbelleğe alınmış yanıtlarla gizlenmesi:

Hızlı ateşli tek IP botları kısaldığında, hala yavaş tek IP botlarını ele almalıyız, yani. istekleri azaltmanın önlediğinden biraz daha uzağa yerleştirerek 'radarın altında uçmak' için özel olarak ayarlanmış botlar.

Yavaş tek IP robotlarını anında işe yaramaz hale getirmek için abelenky tarafından önerilen stratejiyi kullanın: son 24 saat içinde tespit edilen tüm IP'lere 10 dakikalık önbelleğe alınmış sayfalar sunun. Bu şekilde her IP, günde / saat / haftada bir 'şans' elde eder (seçtiğiniz süreye bağlı olarak) ve sadece 'yeniden yüklemeye' basan gerçek kullanıcılar için kazanamayacakları gibi görünür bir rahatsızlık olmaz teklif.

Bu tedbirin güzellik olmasıdır olduğunu da bir botnet kaynaklı olmayan sürece bertaraf etti 'çalar bot' u,.

(Gerçek kullanıcıların tekrar tekrar yenilemelerine izin verildiyse muhtemelen tercih edeceğinizi biliyorum, ancak CAPTCHA veya benzeri olmayan bir istek spam yapan bottan yenileme spam yapan bir insana söylemenin bir yolu yok)

Dördüncü önlem: reCAPTCHA:

CAPTCHA'ların kullanıcı deneyimine zarar verdiği ve bundan kaçınılması gerektiği konusunda haklısınız. Ancak, _one_ durumunda en iyi arkadaşınız olabilirler: Botları engellemek için çok kısıtlayıcı bir sistem tasarladıysanız, bu - kısıtlamaları nedeniyle - bir dizi yanlış pozitif yakalar; son çare olarak sunulan bir CAPTCHA , kısıtlamanıza yakalanan gerçek kullanıcıların (böylece can sıkıcı DoS durumlarından kaçınarak) izin verecektir.

Tatlı nokta, elbette, TÜM botlar ağınıza yakalanırken, çok az gerçek kullanıcı CAPTCHA tarafından rahatsız edildiğinde.

10 dakikalık önbelleğe alınmış sayfaları sunarken, alternatif, isteğe bağlı , CAPTCHA onaylı bir 'ön sayfa tazeleme' de sunarsanız, gerçekten tazelenmeye devam etmek isteyen insanlar eski önbelleğe alınmış sayfayı almadan bunu yapabilir , ancak her yenileme için bir CAPTCHA'yı çözme pahasına. Yani olan bir sıkıntı, ama isteğe bağlı bir onlar çünkü sadece eğilimindedir inatçı kullanıcılar için daha bağışlayıcı olmayı bilmek onlar şanslarını artırmak için oyun sistemi ediyoruz ve bu gelişmiş şansını serbest gelmiyor.

Beşinci önlem: Decoy bok:

Christopher Mahan'ın çok sevdiğim bir fikri vardı, ama farklı bir dönüş yapardım. Ne zaman yeni bir teklif hazırlıyorsanız, başka hiçbir insanın seçmeyeceği iki başka 'teklif' hazırlayın. Teklif ön sayfada göründüğünde, her bir teklife karşılık gelen sayılarla her üç 'teklifi' aynı resme koyun. Kullanıcı / bot öğeyi sipariş etmeye devam ettiğinde, istedikleri teklifi (bir radyo düğmesi) seçmeleri gerekecek ve çoğu bot sadece tahmin edeceğinden, üç durumdan ikisinde botlar değersiz satın alacaklar Önemsiz.

Doğal olarak, bu 'alarm botlarına' değinmez ve birisinin doğru öğeyi seçebilen bir bot inşa etme şansı (ince) vardır. Ancak, yanlışlıkla önemsiz satın alma riski, komut dosyalarının tamamen otomatik botlardan tamamen dönmesini sağlamalıdır.

Altıncı ölçü: Botnet Azaltma:

[silindi]

Tamam ............ Şimdi akşamlarımın çoğunu bu konuda düşünerek geçirdim, farklı yaklaşımları denedim .... küresel gecikmeler .... çerez tabanlı belirteçler ... sıraya hizmet ... 'yabancı daralma' .... Ve işe yaramıyor. Öyle değil. Neden herhangi bir cevabı kabul etmemiş olmanızın ana nedeninin, hiç kimsenin dağıtılmış / zombi ağı / botnet saldırısını engellemek için bir yol önermiş olmasıydı. Ben farklı bir iş parçacığında kimlik doğrulama için botnet sorunu kırık inanıyorum , bu yüzden de sorun için yüksek umutları vardı. Ama benim yaklaşımım buna dönüşmüyor. Sadece geçilecek IP'leriniz var ve yeterince büyük bir botnet, IP adreslerine dayalı herhangi bir analizde kendini göstermiyor.

İşte burada : Altıncı önlemim boşa çıktı. Hiçbir şey değil. Zip. Botnet Normal IP gaz yakalanmak küçük ve / veya yeterince hızlı olmadığı sürece, ben görmüyorum herhangi böyle CAPTHAs olarak açık insan doğrulama içermeyen Botnet'lerden karşı etkili önlem. Üzgünüm, ama bence yukarıdaki beş önlemi birleştirmek en iyi seçenektir. Ve muhtemelen sadece abelenky'nin sadece 10 dakikalık önbellekleme hilesi ile iyi yapabilirsin.


Çok iyi ifade. Girdiniz için teşekkürler.
Shawn Miller

3. AOL'nin IP havuzundan birkaç bot geldiği varsayılarak, tüm AOL sayfalarına eski sayfalar sunduğunuz anlamına mı gelmez?
Andy Dent

@Andy: Yalnızca tüm AOL kullanıcıları spam gönderirken botlarla aynı IP adreslerini paylaşıyorsa.
Jens Roland

6

Bir tür "CAPTCHA oyunu" gibi, insan etkileşimi gerektiren bir gecikme getirmeye ne dersiniz. Örneğin, 30 saniye boyunca damalı topları patlatmak ve katı topları patlatmaktan kaçınmaları gereken küçük bir Flash oyunu olabilir (renk körlüğü sorunlarından kaçınmak!). Oyuna rastgele bir sayı verilecek ve oyunun sunucuya geri gönderdiği şey, kullanılan tohumla birlikte tıklanan noktaların koordinatları ve zaman damgaları olacaktır.

Sunucuda, tıklamaların gerçekten topları patlayıp patlatamayacağını görmek için o tohumu kullanarak oyun mekaniğini simüle edersiniz. Eğer öyleyse, sadece insan değil, kendilerini doğrulamaları 30 saniye sürdü. Onlara bir oturum kimliği verin.

Oturum kimliğinin istediklerini yapmasına izin veriyorsunuz, ancak çok fazla istekte bulunursa, tekrar oynatmadan devam edemezler.


Eğlenceli bir fikir, ama tamamen ve tamamen kullanıcı deneyimini mahvediyor. Siteyi ziyaret eden normal insanlar siteyi 30 saniye yararsız beklemek olarak düşünecektir. İnternette gezinirken veya web uygulamalarını kullanırken 30 saniye gereksiz beklemek hiçbir şekilde kabul edilemez.
Arve Systad

Ziyaret eden normal kişiler gecikmeyi tetiklemez, yalnızca birileri makul olmayan sayıda istekte bulunur. Fikir olduğu yanak biraz dil ama hedef kitle :) küçük flash oyunlar için kullanılıyorsa o çalışma görebilirsiniz
Paul Dixon

Eğlenceli (ve neredeyse kusursuz) bir fikir, ama (özellikle bir Canaries Çanta çılgınlığı sırasında) tahriş olurdum ve bu kontrol yapmak için sunucularında çok daha fazla işlem gerektirir (bu sorunun büyük bir kısmı). Ayrıca, botlar baloncukları patlatabilir. Kuralları sık sık değiştirmeniz gerekir.
Groxx

Her oyunun bir jeton verildiğini ve jetonları verdiğiniz zamanı biliyorsanız, bir jetonu yalnızca bir kez işlemeye çalışmanız ve yayınlandıktan sonra yalnızca 30 ile 300 saniye arasında bir sayı işlemeniz gerekir. Bunun güzelliği, bir bot balonu patlatsa bile, bunu yapmak için hala 30 saniye beklediler.
Paul Dixon

Ayrıca, fikri trafiği sınırlamak olduğunu unutmayalım. Sayfa, "Çok meşgulüz, aceleniz varsa, bu oyunu 30 saniye oynayın veya birkaç dakika sonra tekrar deneyin ...
Paul Dixon

5

Zaten gönderilen birkaç başka / daha iyi çözüm var, ancak tamlık için şunu söyleyeceğim:

Ana endişeniz performans bozulmasıysa ve gerçek bir dövüş yapıyorsanız, aslında bir DoS saldırısı ile uğraşıyorsunuz ve muhtemelen buna göre ele almalısınız. Yaygın bir yaklaşım, saniyede / dakika / dakika başına bir dizi bağlantıdan sonra paketleri güvenlik duvarındaki bir IP'den düşürmektir. Örneğin, standart Linux güvenlik duvarı, iptables, zaman birimi başına bağlantı isteklerini bir IP adresiyle ilişkilendirmek için kullanılabilecek standart bir işlem hashlimit 'eşleştirme işlevine sahiptir.

Her ne kadar, bu soru muhtemelen son SO-podcast'te bahsedilen bir sonraki SO-türevi için daha uygun olacaktır, ancak henüz başlatılmamıştır, bu yüzden cevaplamak tamam :)

DÜZENLEME:
novatrust tarafından işaret edildiği gibi, hala hala müşterilerine IP'leri atanan ISS'ler vardır, çok etkili bir şekilde, böyle bir ISS'nin bir komut dosyası müşterisi tüm ISS'den tüm müşterileri devre dışı bırakacaktır.


Maalesef bazı İSS'ler çıkış IP adreslerini paylaştı. Örneğin, AOL, üyelerin altında göründüğü sınırlı bir IP koleksiyonuna sahiptir: webmaster.info.aol.com/proxyinfo.html Çözümünüz, birçok ISS için kullanıcı sayısına kesin bir sınır getirecektir.
Robert Venables

Vay canına, ben çok şaşırdım. Bunun gibi şeyler hala devam ediyor mu?
falstro

Kutsal inek. Sanırım AOL siteme erişmeyecek.
Karl

5

Uygulamanızın önündeki botları cezalandırmak için bir Tarpit (Wikipedia Makalesi) uygulayan bir apache sunucusuna bir ters proxy yazın . Son birkaç saniye içinde bağlanan IP adreslerinin listesini yönetir. Tek bir IP adresinden gelen bir istek patlaması tespit edersiniz ve ardından yanıt vermeden önce bu istekleri katlanarak geciktirirsiniz.

Tabii ki, bir NAT'd ağ bağlantısındaysa birden fazla insan aynı IP adresinden gelebilir, ancak bir insanın yanıt sürenizin 2mS'den 4mS'ye (hatta 400mS) gitmesine dikkat etmesi olası değildir, ancak bir bot engellenir artan gecikme ile oldukça hızlı.


4
  1. Bant genişliğinizi tüketmemeleri için bir RSS beslemesi sağlayın.
  2. Satın alırken, tam olarak aradığınız şeye bağlı olarak herkesi 45 saniyeye kadar rastgele bir süre bekletin. Zamanlama kısıtlamalarınız tam olarak nedir?
  3. Herkese çizim için adlarını yazmaları için 1 dakika verin ve ardından rastgele insanları seçin. Bence bu en adil yoldur.
  4. Hesapları izleyin (oturuma birkaç kez ekleyin ve saklayın?) Ve insan hızı eşiğinin altında gibi görünen hesaplara gecikmeler ekleyin. Bu, en azından botların insanlarla yavaşlamak ve rekabet etmek için programlanmasını sağlayacaktır.

Bunlar ilginç kavramlar ama "rastgele seçim" ve bekleme süresi woot bağlı olduğunu tahmin ediyorum "çılgınlık" çoğu kaldırır. Zamanlama aciliyet türünü ortadan kaldırmak siteyi mahvetti.
TM.

Bir çizim gibi görünüyorsa, o zaman kumar yasalarıyla uğraşmak zorundadır. Değmez.
jmucchiello

4

Her şeyden önce, tanım olarak, botları meşru kullanıcılardan ayırabilirken vatansız, yani gerçekten anonim işlemleri desteklemek imkansızdır.

İlk sayfa isabetlerinde yepyeni bir şaplak ziyaretçisine biraz maliyet yükleyebileceğimiz bir önermeyi kabul edebilirsek, olası bir çözümüm olduğunu düşünüyorum. Daha iyi bir isim olmaması nedeniyle, bu çözüme gevşek bir şekilde "DMV'yi ziyaret etme" diyeceğim.

Her gün farklı bir yeni araba sunan bir araba bayisi olduğunu ve bazı günlerde her biri 5 $ (sınır 3) ve 5 $ varış ücreti karşılığında egzotik bir spor araba satın alabileceğinizi varsayalım.

Yakalama, bayilik, hangi arabanın satışta olduğunu görmek için kapıdan girmenize izin verilmeden önce bayiliği ziyaret etmenizi ve geçerli bir ehliyet göstermenizi gerektirir. Ayrıca, satın alma işlemini yapabilmek için geçerli bir sürücü belgesi almış olmanız gerekir.

Bu nedenle, bu araba satıcısına ilk kez gelen ziyaretçi (ona Bob diyelim) girişi reddedilir ve sürücü ehliyeti almak için DMV ofisine (uygun bir şekilde hemen yanında bulunan) yönlendirilir.

Sürücü ehliyetine sahip olan diğer ziyaretçilere ehliyetini gösterdikten sonra izin verilir. Bütün gün dolaşarak, satıcıları rahatsız ederek, broşürleri alıp ücretsiz kahve ve kurabiyeleri boşaltarak kendini rahatsız eden bir kişi sonunda geri çevrilecek.

Şimdi, lisans olmadan Bob'a geri dönün - tek yapması gereken DMV ziyaretine bir kez katlanmak. Bundan sonra, yanlışlıkla cüzdanını evde bırakmadığı veya lisansı başka bir şekilde yok edilmediği veya iptal edilmediği sürece bayiliği ziyaret edebilir ve istediği zaman araba satın alabilir.

Bu dünyadaki ehliyetin taklit edilmesi neredeyse imkansızdır.

DMV ziyareti önce başvuru formunu "Buradan Başlayın" kuyruğunda almayı içerir. Bob tamamlanmış başvuruyu, birçok somurtkan memurun ilkinin başvurusunu alacağı, işleyeceği ve her şey yolundaysa, pencere başvurusunu damgalayıp bir sonraki pencereye göndereceği 1. pencereye götürmek zorundadır. Ve böylece Bob, pencerelerden pencereye gider ve sonunda uygulamanın sonuna kadar sürücü ehliyetini alana kadar başvurusunun her adımının geçmesini bekler.

DMV'yi "kısa devre" yapmaya çalışmanın bir anlamı yok. Formlar üç kez doğru bir şekilde doldurulmazsa veya herhangi bir pencerede yanlış yanıtlar verilirse, uygulama yırtılır ve bahtsız müşteri başlangıca geri gönderilir.

İlginç bir şekilde, ofis ne kadar dolu veya boş olursa olsun, birbirini izleyen her pencerede servis almak yaklaşık aynı zaman alır. Sıradaki tek kişi olsanız bile, personel "İleri!" İfadesini kullanmadan önce sarı çizginin bir dakika gerisinde beklemenizi ister.

Ancak DMV'de işler o kadar da korkunç değil. Lisans almak için tüm bekleme ve işleme devam ederken, DMV lobisinde olduğunuzda araba bayiliği için çok eğlenceli ve bilgilendirici bir bilgi izleyebilirsiniz. Aslında, infomerical lisansınızı almak için harcadığınız süreyi kapsayacak kadar uzun çalışır.

Biraz daha teknik açıklama:

En üstte söylediğim gibi, istemci-sunucu ilişkisinde, insanları botlardan ayırmanıza izin veren bazı durumlara sahip olmak gerekli hale geliyor. Bunu, anonim (kimliği doğrulanmamış) insan ziyaretçiyi aşırı cezalandırmayacak bir şekilde yapmak istiyorsunuz.

Bu yaklaşım muhtemelen bir AJAX-y istemci tarafı işlemeyi gerektirir. Yepyeni bir ziyaretçinin woot yapması için "Yeni Kullanıcıya Hoş Geldiniz!" (uygun sunucu tarafı daraltma yoluyla) tamamen yüklenmesi birkaç saniye süren metin ve grafiklerle dolu sayfa. Bu gerçekleşirken (ve ziyaretçi muhtemelen hoş geldiniz sayfalarını okumakla meşgulken), belirleyici jetonu yavaşça toplanmaktadır.

Diyelim ki tartışma için jeton (aka "sürücü ehliyeti") 20 parçadan oluşuyor. Ardışık her parçayı alabilmek için, istemci tarafı kodunun sunucuya geçerli bir istek göndermesi gerekir. 200 milisaniye), bir sonraki parçayı göndermeden önce, bir sonraki yığın isteğini yapmak için gereken 'damga' (yani, bir DMV penceresinden diğerine gitmesi gereken pullar). yığın-meydan okuma-yanıt-yığın-meydan okuma-yanıt -...- yığın-meydan okuma-yanıt-tamamlama süreci.

Bu sürecin sonunda, ziyaretçinin ürün açıklama sayfasına gitmesini ve ardından satın alma sayfasına gitmesini sağlayan bir jetonu vardır. Jeton her ziyaretçi için benzersiz bir kimliktir ve etkinliklerini kısmak için kullanılabilir.

Sunucu tarafında, yalnızca geçerli bir belirteci olan istemcilerden gelen sayfa görüntülemelerini kabul edersiniz. Ya da, herkesin nihayetinde sayfayı görebilmesi önemliyse, geçerli bir jetonu olmayan isteklere zaman cezası koyun.

Şimdi, bunun meşru insan ziyaretçiyle göreceli olarak iyi huylu olması için, token verme sürecinin arka planda nispeten müdahaleci olmayan bir şekilde gerçekleşmesini sağlamak. Bu nedenle, kasıtlı olarak yavaşlatılmış eğlenceli kopya ve grafiklere sahip hoş geldiniz sayfasına olan ihtiyaç.

Bu yaklaşım, mevcut bir jetonu kullanmak için botları kısmaya zorlar veya yeni bir jeton almak için minimum kurulum süresini alır. Tabii ki, bu dağıtılmış bir sahte ziyaretçi ağı kullanan karmaşık saldırılara karşı pek yardımcı olmuyor.


4

Bir captcha ile bile botları tamamen önleyemezsiniz. Bununla birlikte, bir bot yazıp bakımını yapmak ve böylece sayıyı azaltmak için acı çekebilirsiniz. Özellikle botlarını günlük olarak güncellemeye zorlayarak çoğunun ilgisini kaybetmesine neden olacaksınız.

İşte bot yazmayı zorlaştıracak bazı fikirler:

  • Bir javascript işlevi çalıştırmayı gerektirir. Javascript bot yazmak için çok daha acı verici hale getirir. Gerçekte javascript olmayan kullanıcılara izin vermek için javascript çalıştırmıyorlarsa bir captcha gerektirebilirler (minimum).

  • Forma yazarken tuş vuruşlarını zamanlayın (yine javascript aracılığıyla). İnsan benzeri değilse, reddet. Bir botta insan yazmayı taklit etmek bir acıdır.

  • Alan kimliğinizi günlük olarak yeni bir rastgele değerle güncellemek için kodunuzu yazın. Bu onları botlarını her gün güncellemeye zorlar, bu da bir acıdır.

  • Alanlarınızı günlük olarak yeniden sıralamak için kodunuzu yazın (belli ki bir şekilde kullanıcılarınız için rastgele değildir). Saha siparişine güveniyorlarsa, bu onları harekete geçirir ve günlük bakımı bot kodlarına tekrar zorlar.

  • Daha da ileri gidebilir ve Flash içeriği kullanabilirsiniz. Flash karşı bir bot yazmak için tamamen acıdır.

Genellikle onları engellememek, ancak onlar için daha fazla iş yapmak için bir zihniyet almaya başlarsanız, muhtemelen aradığınız hedefe ulaşabilirsiniz.


İnsanlar bazen insan olmayan tipleme ile uğraşırlar - form doldurucular.
Loren Pechtel

Çok farklı yazma stilleri / hızları için izin vermelisiniz - hunt'n'peck'ten touchtyping'e kadar her şey. Arasında bir yere düşen bot yazmak zor değil. Değişken alan kimlikleri ve düzen gibi şeyler, formun okunması ve ayrıştırılmasıyla engellenebilir, bu çok zor değildir.
Kornel

4

Kayıtlı olmayan kullanıcılar için tüm ürün duyurularına 5 dakikalık bir gecikme uygulayın. Sıradan kullanıcılar bunu gerçekten fark etmeyecek ve gayriresmi kullanıcılar yine de kaydedilecek.


3

Gelen IP'leri kontrol ettiğinizi iddia ettiğiniz büyük yükü görmüyorum. Aksine, müşterilerimden biri için her beş dakikada bir HTTP erişim günlüklerini analiz eden bir proje yaptım (gerçek zamanlı olabilirdi, ama hiçbir zaman tam olarak anlayamadığım bir şey istemedi) ve adresin meşru bir arama motoruna (google, yahoo vb.) ait olduğu onaylanmadıkça, aşırı sayıda istek oluşturan herhangi bir IP adresinden bağlantıları engellemek için güvenlik duvarı kuralları oluşturur.

Bu istemci bir web barındırma hizmeti çalıştırır ve toplam 800-900 etki alanı işleyen üç sunucu üzerinde bu uygulamayı çalıştırıyor. Pik etkinlik saniyede bin vuruş aralığındadır ve hiçbir zaman bir performans sorunu olmamıştır - güvenlik duvarları, kara listeye alınan adreslerden paketleri bırakmada çok etkilidir.

Ve evet, bu şemayı yenecek DDOS teknolojisi kesinlikle var, ancak bunun gerçek dünyada olduğunu görmüyor. Aksine, sunucularındaki yükü büyük ölçüde azalttığını söylüyor.


3

Benim yaklaşımım teknolojik olmayan çözümlere odaklanmak olacaktır (aksi takdirde kaybedeceğiniz bir silahlanma yarışına giriyorsunuz ya da en azından çok fazla zaman ve para harcıyorsunuz). Faturalandırma / gönderi parçalarına odaklanacağım - botları aynı adrese birden fazla teslimat bularak veya tek bir ödeme yöntemine yapılan birden fazla masrafla bulabilirsiniz. Bunu birkaç hafta boyunca öğeler arasında bile yapabilirsiniz, bu nedenle bir kullanıcı önceki bir öğeye sahipse (gerçekten çok hızlı yanıt vererek) bu sefer bir çeşit "handikap" atanabilir.

Bu da şanslı ve woot satın almak için insanların çemberini genişletmek gibi bir yan etkisi (yararlı, sanırım, ama sizin durumunuz için yanlış olabilir).


3

Tamamen teknik çözümler sunuluyor. Bu nedenle soruna başka bir bakış önereceğim.

Anladığım kadarıyla, botlar sattığınız çantaları satın almaya çalışan insanlar tarafından kuruluyor . Problem şu -

  1. Botları kullanmayan diğer insanlar satın alma şansını hak ediyorlar ve sınırlı miktarda çanta sunuyorsunuz.
  2. İnsanları sitenize çekmek ve sadece çantaları satmak istiyorsunuz.

Botlardan kaçınmaya çalışmak yerine, potansiyel çanta alıcılarının bir satış gerçekleştiğinde bildirim almak için bir e-postaya, hatta SMS güncellemesine abone olmalarını sağlayabilirsiniz. Onlara bir iki dakika kafa bile başlatabilirsiniz (satışın başladığı, rastgele oluşturulduğu ve posta / SMS ile gönderildiği özel bir URL).

Bu alıcılar sitenizde olduklarını satın almaya gittiklerinde, yan banner'larda veya istediğiniz her şeyi onlara gösterebilirsiniz. Botları çalıştıranlar sadece bildirim hizmetinize kaydolmayı tercih edecektir.

Bot koşucular, satın alma işlemini daha hızlı tamamlamak için bildiriminizde botlar yayınlamaya devam edebilir. Bunun için bazı çözümler tek tıklamayla satın alınabilir.

Bu arada, kullanıcılarınızın kayıtlı olmadığını belirttiniz, ancak bu çantaları satın alanlar rastgele alıcılar değil, bu satışları dört gözle bekleyen insanlar gibi görünüyor. Bu nedenle, bir çantayı "kazanmaya" yönelik bir avantaj elde etmek için kaydolmaya istekli olabilirler.

Aslında önerdiğim şey, soruna teknik bir sorundan ziyade sosyal bir sorun olarak bakmaktır.

Asaf


2

Dakikada çok fazla istekte bulunan zaman engelleme kullanıcı aracıları. Örneğin, bir sayfayı tam olarak 5 saniyede bir 10 dakika boyunca talep eden biri varsa, muhtemelen bir kullanıcı değildir ... Ama bunu doğru yapmak zor olabilir.

Bir uyarıyı tetiklerse, her isteği mümkün olduğunca az DB-IO ile statik bir sayfaya yönlendirin ve X dakika içinde yeniden açılmalarına izin verileceğini bildiren bir mesajla.

Bunu yalnızca sayfa isteklerine uygulamanız ve tüm medya isteklerini (js, resimler vb.) Yok saymanız gerektiğini eklemek önemlidir.


Bunu kişisel bir projede yaptım, iyi bir yöntem gibi görünüyor. Tüm ipleri sayfanıza vurdukları anda hatırlamanız ve sayfanıza çok sık vurmanın ne anlama geldiğini belirleyen kurallara sahip olmanız gerekir. Sorun OP kontrol IPs çok pahalı olduğunu söyledi, ki ben anlamıyorum.
Karl

IP kontrolünü kendiniz uygularsanız (yani veritabanınızda, PHP betiğinizden veya herhangi bir şeyden), oldukça pahalı olacaktır. Güvenlik duvarını sizin için yapmasını sağlayın ve çok daha uygun hale gelir.
rmeador

rmeador: İsteğin HTML veya diğer medya için olup olmadığını belirlemek çok daha zor gibi görünüyor. Sayfanızda 20 harici öğe varsa, 1-2 saniye içinde yeni bir kullanıcı için en az 21 istek arıyorsunuz.
Oli

2

DoS'ı önlemek, yukarıda özetlediği @ davebug'un 2 numaralı hedefini, "Siteyi botlarla yavaşlamamış bir hızda tutun" ancak # 1'i çözmek zorunda kalmaz, "Öğeyi komut dosyası olmayan insanlara sat"

Eminim bir senaryo, bir insanın sipariş formlarından geçebileceğinden daha hızlı olan aşırı sınırın altında paten yapmak için bir şeyler yazabilir.


2

Pekala, spam göndericileri "bok bataklığı" açık artırmasını kazanmak için normal insanlarla yarışıyor mu? Neden bir sonraki müzayedenin gerçek bir "bok torbası" olmasını istemiyorsun? Spam gönderenler köpeklerle dolu bir çanta için iyi para ödüyorlar ve hepimiz onlara gülüyoruz.


2

Burada önemli olan, sunucunuzdan yükü kaldırmak, botlordların onlara oyun oynadığınızı bilmelerine izin vermeden botların bok çantasını kazanmasını önlemek için sistemi değiştirmektir. Sonunda bir işlem yapmadan bunu yapmanın bir yolu olduğunu sanmıyorum.

Böylece isabetleri ana sayfanıza kaydedersiniz. Birisi sayfaya her ulaştığında bağlantı son isabetiyle karşılaştırılır ve çok hızlıysa, teklif olmadan sayfanın bir sürümü gönderilir. Bu, ana sayfanızın önbelleğe alınmış sürümlerini sunan bir sunucuya botlar (çok hızlı isabetler) gönderen bir çeşit yük dengeleme mekanizması ile yapılabilir; gerçek insanlar iyi sunucuya gönderilir. Bu, ana sunucudan yükü alır ve botların sayfalara hala doğru şekilde sunulduğunu düşünmelerini sağlar.

Teklif bir şekilde reddedilebiliyorsa daha da iyidir. Sonra yine de sahte sunucuda teklifler yapabilirsiniz ama bot formu doldurduğunda "Üzgünüm, yeterince hızlı değildiniz" deyin :) O zaman kesinlikle oyunda olduklarını düşüneceklerdir.


2

Emir veren senaryoların olduğunu nereden biliyorsunuz?

Sorununuzun özü, betikleri meşru kullanıcılardan ayıramayacağınız ve bu nedenle onları engelleyememenizdir, bu yüzden betiklerin olduğunu nasıl anlarsınız?

Bu soruya cevap vermenin bir yolu varsa, komut dosyalarını filtrelemek için kullanabileceğiniz bir dizi özelliğiniz vardır.


2

Sorunu kafasına çevirelim - gerçek insanların satın almasını istediğiniz şeyleri satın alan botlarınız var, botların sizin yapmadığınız şeyleri satın alması için gerçek bir şans yapmaya ne dersiniz? gerçek insanlar satın almak istiyorum.

Kazıma botlarının gerçek durum olduğunu düşünecek, görüntülenmeyen bazı html'ler için rastgele bir şansınız var, ancak gerçek insanlar görmeyecek (ve gerçek kişilerin kör içerdiğini unutmayın, bu yüzden ekran okuyucular vb. De düşünün) ve bu, aşırı derecede pahalı bir şey satın almak için geçer (veya gerçek satın alma işlemini gerçekleştirmez, ancak bankaya koymanız için ödeme ayrıntılarını alır).

Botlar, 'satın alma işlemini yapmak' yerine 'kullanıcıyı uyarmaya' geçse bile, yeterince yanlış alarm alabiliyorsanız, insanlar için yeterince değersiz hale getirebilirsiniz (belki herkes değil, ama dolandırıcılıkta bir miktar azalma hiç yoktan iyidir) rahatsız etmeyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.