Uygulamanıza Ulaşmadan Sahte Crawlerları Durduran Bir Sunucu Ara Yazılımı

Bir web uygulamasındaki istek pipeline'ı zarif bir şeydir. İstek web sunucusuna gelir, bir ara yazılım yığını içinde geçer, bir kontrolöre ulaşır ve bir yanıt döndürür. Yığındaki her ara yazılımın isteği inceleme, değiştirme, ileri iletme veya tamamen reddetme fırsatı vardır. Bu mimari, istek herhangi bir uygulama mantığına dokunmadan doğrulanma gerçekleştiği için bot algılamayı uygulamak için mükemmeldir. Googlebot olduğunu iddia eden sahte bir crawler, ara yazılım katmanında tanımlanır ve engellenir, ve kontrolör isteğin var olduğunu bile bilmez. Bir sayfayı render etmek için harcanan CPU döngüsü yok. Çalıştırılan veritabanı sorgusu yok. Doldurulan cache girişi yok. Sahte bot kapıda durdurulur ve tüketilecek sunucu kaynakları meşru ziyaretçiler için korunur.

Bu ara yazılımı oluşturma motivasyonu somut ve pahalı bir sorundan kaynaklandı. Büyük bir uygulama, gerçek kullanıcı tabanıyla ilişkili olmayan oranlarda bant genişliği ve sunucu kaynakları tüketiyordu. Erişim günlükleri, Googlebot, Bingbot ve çeşitli diğer meşru crawlerlar olduğunu iddia eden istek hacimleri açığa çıkardı. Araştırma, çoğunluğunun sahte olduğunu ve iddia ettikleri arama motorları yerine bulut barındırma sağlayıcılarından kaynaklandığını doğruladı. Her sahte istek gerçek bir istekle aynı sunucu kaynaklarını tüketiyordu: aynı PHP yürütme süresi, aynı veritabanı sorguları, aynı bellek tahsisi, yanıt için aynı bant genişliği. Saatlik binlerce sahte istek arasında çarpıldığında, maliyet önemliydi. Ara yazılım çözümü, sahte crawlerları herhangi bir uygulama kaynağı tüketmeden önce yakalamak suretiyle bu israfı ortadan kaldırmak için tasarlanmıştır.

Uygulama, herhangi bir arka uç geliştiricinin uyarlayabileceği basit bir deseni izler. Ara yazılım her gelen isteği yakalar, kullanıcı aracı dizesinin bilinen bir arama motoru crawler deseniyle eşleşip eşleşmediğini kontrol eder ve eğer eşleşirse, isteğin IP adresini bot algılama API'sini kullanarak crawler'ın bilinen altyapısına karşı doğrular. Crawler olduğunu iddia eden ancak doğrulamada başarısız olan istekler 403 yanıtı ile engellenir. Doğrulamayı geçen veya crawler olduğunu iddia etmeyen istekler, ara yazılım yığını içinde normalde devam eder. Tüm kontrol minimal gecikmesi ekler, çünkü doğrulama sonuçları IP adresi başına cache'lenmiş olur, bu da her benzersiz IP'nin yalnızca bir kez doğrulanması anlamına gelir.

Ara Yazılım Katmanında Engellemenin Arkasındaki Karar Mantığı

Ara yazılım katmanında değil de web sunucusu seviyesinde (Nginx veya Apache) veya uygulama seviyesinde (kontrolörler içinde) engellemeyi tercih etmek, belirli ödünleşimleri olan kasıtlı bir mimari kararıdır. Web sunucusu seviyesinde engelleme, istek PHP'ye hiç ulaşmadığı için kaynak tüketimi açısından en verimli seçenektir. Bununla birlikte, bot algılaması için web sunucusu yapılandırması, tipik olarak statik IP kara listelerini veya basit kullanıcı aracı eşleştirmesini içerir ve ikisi de gerçek crawlerları sahte olanlardan doğru bir şekilde ayırt etmek için gereken dinamik, API odaklı doğrulamayı sağlamaz. Milyonlarca IP adresinin statik bir kara listesini sürdürmek pratik değildir ve yalnızca kullanıcı aracı eşleştirmesi, kullanıcı aracıları kolayca taklit edilebileceği için kimliği doğrulayamaz.

Kontrolörler veya hizmet sınıfları içinde uygulama seviyesinde engelleme, en esnek seçenektir ancak en az verimli olanıdır. İstek bir kontrolöre ulaştığında, ara yazılım yığını zaten yürütülmüş, rota çözülmüş ve potansiyel olarak oturum başlatma ve kimlik doğrulama gibi pahalı işlemler zaten gerçekleşmiştir. Bu noktada engelleme, kontrolör yürütme süresini tasarruf eder ancak bundan önceki her şeyi harcayan şeylerdir. Saatlik binlerce sahte bot isteği olan yüksek trafikli uygulamalar için, bu harcanan ön işleme toplamı olur.

Ara yazılım katmanı, pipeline'daki en uygun noktada oturmaktadır. Oturum işlemeden, kimlik doğrulamadan, rota özgü ara yazılımdan ve kesinlikle herhangi bir kontrolör mantığından önce yürütülür. Ancak başlık, IP adresleri ve sorgu parametreleri dahil olmak üzere tam istek nesnesine erişimi vardır, bu da basit desen eşleştirmesi yerine sofistike doğrulama mantığı gerçekleştirebilmesi anlamına gelir. Ara yazılım harici bir API'yi çağırabilir, sonuçları cache'leyebilir, iddia edilen kimliğe dayalı koşullu mantığı uygulayabilir ve doğrulama sonuçlarını analiz için günlüğe kaydedebilir. Verimliliğin ve esnekliğin bu kombinasyonu, ara yazılımı bir web uygulamasında bot algılaması için doğal bir ev haline getirir.

Cache stratejisi, performans için özellikle önemlidir. Cache olmadan, iddia edilen bir crawler'dan gelen her istek IP adresini doğrulamak için bir API çağrısı gerektirecektir. Hızlı bir API ile bile, bu her isteğe gecikme ekleyecektir. Çözüm, doğrulama sonuçlarını IP adresi ile keyed olarak cache'lemek ve birkaç saat veya hatta bir tam gün tutmaktır. Arama motoru crawlerları, seyrek değişen kararlı IP aralıklarından faaliyet gösterir, bu nedenle cache periyodu içinde doğrulanmış bir sonuç uzun süreler için geçerli kalır. Iddia edilen bir Googlebot'tan bir istek geldiğinde, ara yazılım önce cache'i kontrol eder. IP, cache periyodu içinde meşru olarak doğrulanmışsa, istek hemen geçirilir. IP sahte olarak doğrulanmışsa, hemen engellenir. Yalnızca ilk kez IP adresleri gerçek bir API çağrısı gerektirir ve sonrasında, sonuç ihmal edilebilir gecikme maliyeti ile cache'den sunulur.

Engellenen İsteklere Ne Olur

Sahte bir crawler'ı engelleme, basitçe 403 yanıtı döndürmek ve devam etmek meselesi değildir. Engelleme kararı ve bağlamı analiz için günlüğe kaydedilmelidir. Her engellenen istek, siteye erişmeye çalışan kişi hakkında, ne olduğunu iddia eden ve nereden geldikleri hakkında bir veri noktasını temsil eder. Zaman içinde, bu günlük daha geniş güvenlik kararlarını bilgilendirir. Belki belirli bir ASN, sahte crawlerların orantısız bir payından sorumludur. Belki sahte Googlebot istekleri günün belirli zamanlarında ani artış gösterir. Belki belirli bir URL yolu, diğerlerinden daha fazla sahte crawler'ı çeker, bot'ların belirli içeriği hedeflediklerini önerir.

Engellenen bir isteğe yanıt, toptan 403'ten daha nüanslı olabilir. Bazı uygulamalar, bot'un tanımlandığını gizlemek için 429 (Çok Fazla İstek) döndürür, bot operatörünün yaklaşımını ayarlamalarını zorlaştırır. Diğerleri, minimal bant genişliği harcayan boş bir gövde ile 200 döndürür, bot'un algılanmadığını bilmesini engeller. Daha agresif yaklaşımlar, crawler doğrulamasının başarısız olduğunu belirten bir ileti ile 403 döndürür, bu da saydam olur ancak bot operatörlerine algılama mekanizması hakkında bilgi verir. Seçim, site operatörünün saydamlığa karşı operasyonel güvenlik felsefesine bağlıdır.

Crawler olduğunu iddia eden ancak aslında arama motoru kullanıcı aracı dizelerini yanlış kullanmanın tesadüfi olarak meşru hizmetler olarak, engelleme amaçlanandandan daha yıkıcı olabilir. Bazı SEO izleme araçları, örneğin, Google'ın bir sayfayı nasıl gördüğünü simüle etmek için Googlebot benzeri kullanıcı aracıları kullanır. Bu araçlar, Google olmadıkları için doğrulamada başarısız olur, amaçları site operatörünün perspektifinden meşru olsa da. Ara yazılım, bunu güvenilir üçüncü taraf hizmetler için bilinen IP aralıkları kara listesi tutarak veya doğrulamayı belirli kullanıcı aracı desenleri için uygularken diğerlerini göz ardı ederek karşılayabilir. Ara yazılım yaklaşımının esnekliği, web sunucusu yapılandırması veya uygulama kodu değişiklikleri gerektirmeden bu tür nüanslı politikaya izin verir.

Senkron Versus Asenkron Doğrulama

Bot'ları senkron veya asenkron şekilde doğrulamanın, hem engellemenin etkinliğini hem de uygulama üzerindeki performans etkisini etkiler. Senkron doğrulama, ara yazılımın isteği duraklatmaya, doğrulama API'sini çağırmaya, yanıt için beklemeye ve sonra sonuca göre isteği izin verme veya engelleme anlamına gelir. Bu yaklaşım anlık engelleme sağlar ancak her IP adresinden ilk istek için gecikme ekler. Cache ile, gecikme yalnızca ilk isteği etkiler, ancak yüksek trafikli uygulamalar için bu ara sıra gecikme bile kabul edilemez olabilir.

Asenkron doğrulama farklı bir yaklaşım alır. Yeni bir IP'den ilk istek, arka planda bir doğrulama işi sıralanırken geçirilir. Doğrulama sonucu geri geldiğinde, cache'lenmiş olur ve bu IP'den gelen sonraki tüm istekler sonuca göre işlenir. Bu yaklaşım istek pipeline'ına sıfır gecikme ekler ancak sahte bot'lardan az sayıda ilk isteğin doğrulama tamamlanmadan önce geçmesine izin verir. Çoğu uygulama için, bu ödünleşim kabul edilebilir. Engellenmeden önce üç istek gönderen sahte bir bot, engellenmemiş binlerce istek gönderenden çok daha az kaynaklar tüketmiştir.

Kuyruk sistemi asenkron yaklaşımı basit hale getirir. Ara yazılım, bot algılama API'sini çağıran, sonucu cache'de depolayan ve isteğe bağlı olarak uygulamanın diğer bölümlerinin dinleyebileceği bir olayı ateşleyen bir doğrulama işi yayınlar. İş saniyeler içinde çalışır, bu da doğrulanmamış bot trafiğinin geçebileceği pencere son derece dardır. Hızlı bir bellek içi cache kullanan uygulamalar için, cache'lenmiş sonuç tüm uygulama örneklerine hemen kullanılabilir olup, hatta yük dengelemeli bir ortamda bile, doğrulama tüm sunucular arasında IP adresi başına yalnızca bir kez gerçekleşmesi gerekir.

Hibrit yaklaşım her ikisinin de en iyisini birleştirir. Yüksek güvenli desenleri eşleştiren bilinen bot kullanıcı aracıları, minimum gecikme ekleyen cache'lenmiş sonuçlarla senkron doğrulama tetikler. Daha düşük güvenli desenleri asenkron doğrulama tetikler, ilk isteğin geçmesine izin verirken doğrulama arka planda çalışır. Bu kademeli yaklaşım yaygın durumda optimize eder ve kenar durumları zarif bir şekilde işler. Ara yazılımın istek pipeline'daki konumu, bu mantığı uygulamak için ideal kılar, çünkü yönlendirme kararını vermek için gereken tüm bilgilere erişimi vardır ve herhangi bir pahalı uygulama mantığından önce yürütülür.

Kapıda Engellemenin Ölçülebilir Etkisi

Bot algılama ara yazılımı uygulamanın sonuçları sunucu ölçümlerinde neredeyse hemen görülebilir. En dramatik değişiklik bant genişliği tüketimindedir. Sahte crawlerlar, yanıttaki başvurulan tüm varlıklar dahil olmak üzere tam HTML sayfalarını talep eder. Her engellenen istek, yanıtın tam yanıt iletişim için kullanılacak bant genişliğini kaydeder, bu da içerik açısından ağır sayfalar için istek başına on veya yüz kilobayt olabilir. Saatlik binlerce engellenen istek arasında, bant genişliği tasarrufu, özellikle gigabayt aktarımı için ücret alan sağlayıcılar üzerinde barındırılan uygulamalar için anlamlı maliyet indirimleri içinde birikir.

CPU kullanımı düşer, çünkü sunucu artık hiçbir değer üreten istekler için PHP kodu yürütmüyor, veritabanı sorguları çalıştırılmıyor ve şablonlar render edilmiyor. Azalma, insan trafiği düşük ancak bot trafiği sabit kaldığında özellikle belirgindir. Ara yazılımı uygulamadan önce, sunucu sabah üçte bile temel CPU kullanımını korumuştur, çünkü bot'lar uyumaz. Uygulamadan sonra, off-peak kullanımı sıfıra yakın düşer, sunucuya yoğun saatlerde meşru trafik için boşluk verir.

Meşru ziyaretçiler için yanıt süreleri, azalan sunucu yüküne doğrudan bir sonucu olarak iyileşir. Saniyede beş yüz istek işleyen bir web sunucusu, bunların üç yüzü sahte bot, iki yüz gerçek ziyaretçinin iki yüz isteği işlemek için daha az kapasitesi vardır, yalnızca iki yüz istek işleyen bir sunucudan, hepsi meşrudur. Ara yazılım, engellenen istekler üzerinde kaynakları tasarruf etmiyor. Sunucu tarafından gerçek iş için daha fazla kapasiteye sahip olduğu için, geçen her iskeliğin kalitesini iyileştirir.

Veritabanı yükü orantılı olarak azalır. Uygulama her sayfa isteği için veritabanını sorgularsa, sahte üç yüz istek engellenmesi saniyede üç yüz gereksiz veritabanı sorgusunu ortadan kaldırır. Karmaşık sorguları veya sınırlı veritabanı bağlantıları olan uygulamalar için, bu azalma stabil işlem ile periyodik aşırı yük arasındaki fark olabilir. Ara yazılım, istenmeyen trafiği herhangi biriyle durdurmadan önce, tüm yığını web sunucusundan uygulama katmanından veritabanına kadar korur.

Sıkça Sorulan Sorular

Bot algılama ara yazılımı eklemek siteyi gerçek kullanıcılar için yavaşlatır mı?

Gerçek kullanıcılar için, ara yazılım ihmal edilebilir ek yük ekler. Kullanıcı aracı dizesini crawler desenleri karşısında kontrol eder, bu mikrosaniye sürer. Yalnızca crawler olduğunu iddia eden istekler doğrulama mantığını tetikler ve cache'lenmiş sonuçlar bile API'nin IP adresi başına yalnızca bir kez çağrılması anlamına gelir. Normal ziyaretçiler ölçülebilir gecikme artışı yaşamaz.

Bot algılama API'si geçici olarak kullanılamaz durumda olursa ne olur?

Ara yazılım bir geri dönüş stratejisini içermelidir. Yaygın bir yaklaşım, API ulaşılamıyorsa isteğin geçmesine izin vermektir, doğrulama hizmeti kesintiğinin meşru crawlerları engelmemesini sağlar. Daha önce cache'lenmiş sonuçlar API kesintisi sırasında çalışmaya devam eder ve kısa bir devre kesici deseni, tekrarlanan başarısız API çağrılarının performansı degrademasını engeller.

Bu ara yazılım yaklaşımı herhangi bir web çerçevesi ile çalışabilir mi?

Kullanıcı aracılarını kontrol etme, IP adreslerini doğrulama ve sonuçları cache'leme çekirdek mantığı, çerçeve-agnostiktir. Ara yazılım deseni her büyük web çerçevesinde bulunur. API çağrısı ve cache mantığı herhangi bir çerçevenin ara yazılımı veya olay sistemine uyarlanabilir. Anahtar ilke, teknoloji ne olursa olsun aynıdır: erken yakala, IP tarafından doğrula, sonucu cache'le.

Meşru bir aracın sahte bir bot olarak yanlış tanımlanmasıyla ilgili false pozitif'leri nasıl işleyebilirim?

Crawler benzeri kullanıcı aracılarını yanlış kullanan bilinen meşru araçlar için IP aralıkları kara listesi tutun. Ara yazılım, doğrulama gerçekleştirmeden önce kara listeyi kontrol eder, güvenilir hizmetlerin API çağrıları olmadan geçmesine izin verir. Doğrulama günlüğü, hangi IP adreslerinin engellenmesini ve ilişkili ASN bilgilerini göstererek false pozitif'leri belirlemeye yardımcı olur.

Sahte bot'ları 403 mi yoksa başka bir durum kodu ile mi engellemelidir?

Seçim hedeflerinize bağlıdır. 403 açıkça erişimin reddedildiğini iletir. 429, tespit yeteneğini açığa çıkarmadan oran sınırlamayı önerir. 200 boş bir gövde ile bot operatöre en az bilgiyi verir. Çoğu uygulama için, 403 en basit ve standartlara uygun seçimdir.

IP doğrulama cache'i ne sıklıkla yenilenmeli?

Arama motoru IP aralıkları seyrek değişir, bu nedenle çoğu uygulama için on iki saatlik cache süreleri güvenlidir. Daha kısa cache süreleri API çağrısı hacmini artırır ancak daha taze doğrulama verisi sağlar. Çoğu site için, yirmi dört saatlik cache doğruluk ve verimlilik arasında doğru dengeyi sağlar.