İstek İnceleyici rehberi
XGM İstek İnceleyici ile bir User-Agent dizesi nasıl okunur, dizeler neden tuhaf görünür, istemci ipuçları neyi değiştirir ve UA tespiti neden kırılgandır.
User-Agent dizesi nedir
Bir tarayıcıdan giden her HTTP isteği, isteği gönderen yazılımı tarif eden bir User-Agent başlığı taşır (RFC 9110 §10.1.5). Sunucular bunu istatistik toplamak, işletim sistemine göre farklı indirme bağlantıları sunmak ve bazen de, pek akıllıca olmayan bir biçimde, bir tarayıcının hangi özellikleri desteklediğine karar vermek için kullanır. Tarama botları ve betikler de kendi dizelerini gönderir; curl/8.5.0 gibi bir araç adı ya da bir arama motoru botunun adı bunlara örnektir. Başlığın içeriği tamamen istemcinin denetimindedir; standart yalnızca biçimi tarif eder, doğruluğunu güvence altına almaz. Bu yüzden onu bir kimlik belgesi değil, karşı tarafın kendisi hakkındaki beyanı olarak düşünmek gerekir.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36Yukarıdaki dize, Mozilla, AppleWebKit, KHTML, Gecko ve Safari adlarını anmasına rağmen Chrome'a aittir. Tarayıcılar bu simgeleri onlarca yıl boyunca birbirine ekledi; amaç, rakip bir tarayıcının adını arayan sitelerin kendilerine de tam sürümü sunmasıydı. Sonuçta anlamlı bilgi uyumluluk simgelerinin arasına gizlenmiş durumdadır ve bir çözümleyici tam bu noktada işe yarar. Bu miras yüzünden dizedeki sıralama da sezgisel değildir: gerçek ürün adı çoğu zaman sonlara doğru yer alır. Dizeyi elle okumaya çalıştığınızda kolayca yanlış simgeye takılırsınız.
İstek İnceleyici nasıl kullanılır
- İstek İnceleyici aracını açın. Araç kendi tarayıcınızın User-Agent dizesiyle başlar.
- Tarayıcıyı, işletim sistemini, motoru, cihaz türünü ve dizenin bir bota ya da betiğe benzeyip benzemediğini okuyun.
- Bunun yerine başka bir dizeyi, örneğin bir sunucu günlüğünden aldığınız satırı yapıştırarak çözümletin.
- Sonucu bir hata bildirimine eklemek için kopyalayın ya da dışa aktarın.
Dizeniz doğrudan tarayıcıdan okunur ve sayfanın içinde çözümlenir; bu araç için XGM'ye gönderilmez. Bir web sitesi hatasını bildirirken, çözümlenmiş tarayıcı ve işletim sistemi sürümleri genellikle eklenmesi en yararlı ayrıntılardır. Hata yalnızca tek bir tarayıcıda görünüyorsa motor adı da en az ürün adı kadar önemlidir, çünkü Blink, Gecko ve WebKit farklı davranır. Sonucu olduğu gibi kopyalayıp bildirime yapıştırmak, karşı tarafın ortamı yeniden kurmasını kolaylaştırır.
Çözümleyici neleri bildirir
| Alan | Örnekler | Notlar |
|---|---|---|
| Tarayıcı | Chrome 140, Firefox 143, Safari 18, Edge 140 | Ürün simgelerinden belirlenir; Edge ve Opera kendilerini Chrome'unkinin üstüne işaretler |
| İşletim sistemi | Windows, macOS, Android, iOS, Linux | Sürümler dondurulmuş ya da yaklaşık olabilir |
| Motor | Blink, Gecko, WebKit | Sayfanın nasıl işleneceğini ve web platformu davranışını belirler |
| Cihaz türü | Masaüstü, mobil, tablet | Mobil ve tablet simgelerine göre |
| Bot ya da betik | Tarama botu adları, curl, wget, HTTP kitaplıkları için evet | Yalnızca kendini bot olarak tanıtanlar tespit edilir |
Dondurulmuş ve sadeleştirilmiş dizeler
User-Agent Client Hints
Eski dize çok şey açık ettiği ve çözümlenmesi zor olduğu için Chromium tabanlı tarayıcılar User-Agent Client Hints'i getirdi. Varsayılan olarak, marka ve ana sürümü taşıyan Sec-CH-UA ile Sec-CH-UA-Mobile ve Sec-CH-UA-Platform gibi kısa başlıklar gönderirler. Tam sürüm ya da cihaz modeli gibi daha fazla ayrıntıya ihtiyaç duyan sunucular bunu bir Accept-CH yanıt başlığıyla ayrıca istemek zorundadır. Böylece ayrıntılı bilgi her isteğe kendiliğinden eklenmek yerine yalnızca gerçekten isteyen sitelere gider. Bu da parmak izi çıkarmak için toplanabilecek veri miktarını varsayılan olarak azaltır.
Sec-CH-UA: "Chromium";v="140", "Google Chrome";v="140", "Not.A/Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"Firefox ve Safari bu başlıkları göndermez, bu yüzden sunucuların onlar için klasik dizeye ihtiyacı sürer. JavaScript tarafında navigator.userAgentData, destekleyen tarayıcılarda aynı bilgiyi sunar. Pratikte iki mekanizmayı bir arada düşünmek gerekir: önce istemci ipuçlarına bakın, yoksa dizeye geri dönün. İpuçları da istemci tarafından üretildiği için dizeden daha güvenilir değildir, yalnızca daha düzenlidir.
Botlar ve sahte user agent'lar
Düzgün davranan tarama botları kendilerini tanıtır; örneğin adlarında "bot" geçer ve botu açıklayan bir URL taşırlar. Betikler ve kitaplıklar, aksi yapılandırılmadıkça curl/8.5.0 ya da python-requests/2.32.3 gibi varsayılan değerleri gönderir. Çözümleyici bu tür dizeleri bot ya da betik olarak işaretler. Kendi otomasyonunuzu yazarken aynı nezaketi göstermek işinize yarar: ad, sürüm ve bir iletişim adresi taşıyan bir dize, site sahiplerinin sizi engellemek yerine sizinle konuşmasını sağlar. Anonim varsayılan dizeler ise hız sınırlarına ilk takılanlardır.
Herkes istediği User-Agent dizesini gönderebilir, bu yüzden kendini bir arama motoru botu olarak tanıtan bir dize hiçbir şey kanıtlamaz. Büyük arama motorları botlarının nasıl doğrulanacağını belgeler: genellikle IP adresi için ters DNS sorgusu yapılır, dönen ad ileri yönde yeniden çözümlenir ve sonucun aynı adres olması beklenir. Ters DNS aracı bu adımların ilkini gerçekleştirir. İki adımdan yalnızca birini yapmak yeterli değildir, çünkü ters kaydı isteği gönderen taraf denetleyebilir. Doğrulama başarısız olursa istek, iddia ettiği bot değildir.
dig +short -x 192.0.2.66
crawl-192-0-2-66.bot.example.com.
dig +short crawl-192-0-2-66.bot.example.com A
192.0.2.66 # must match the original IPGünlüklerde ve analizlerde user agent'lar
Sunucu günlükleri her isteğin User-Agent değerini kaydeder; bu da onları olağan dışı trafiği fark etmek için kullanışlı kılar. python-requests gibi bir kitaplık varsayılanıyla ya da neredeyse kimsenin kullanmadığı eski bir tarayıcı sürümüyle gelen ani istek seli, çoğu zaman kazıma veya otomatik saldırılara işaret eder. Gerçek tarayıcılar sık güncellendiği için çok eski sürümlerin toplu halde görünmesi şüphelidir. Tek bir dizenin toplam trafiğin büyük bir bölümünü oluşturması da incelenmeye değer. Günlükleri düzenli olarak özetlemek, bu örüntüleri sorun büyümeden görmenizi sağlar.
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Analiz araçlarında User-Agent verisi, yukarıda anlatılan sadeleştirmeler yüzünden giderek kabalaşıyor. Bu veriyi mobil ziyaretçi oranı ya da hangi tarayıcı ailelerinin test edilmesi gerektiği gibi geniş sorular için kullanın, kesin işletim sistemi veya cihaz sürümleri için değil. Küçük farkları kovalamak yerine genel eğilimlere bakmak daha sağlıklı sonuç verir. Kesin ayrıntı gerektiğinde istemci ipuçlarını açıkça istemek, dizeyi zorlamaktan daha doğru bir yoldur.
User agent'a bakarak karar vermek neden kırılgandır
Davranışı tarayıcı adına göre belirlemek; tarayıcılar değiştiğinde, yeni bir tarayıcı çıktığında ya da kullanıcı dizeyi değiştirdiğinde bozulur. MDN ve tarayıcı üreticileri bunun yerine özellik tespitini önerir: bir API'yi kullanmadan önce var olup olmadığını denetleyin, biçimlendirme için de CSS @supports kullanın. User-Agent çözümlemesini analiz, günlük ve destek tanılaması için saklayın. Özellik tespiti henüz duymadığınız tarayıcılarda da doğru çalışır; ad listesi ise her yeni sürümde eskir. Bakımı da ucuzdur, çünkü kod tarayıcı adlarının değil yeteneklerin peşindedir.
| Şunun yerine | Bunu kullanın |
|---|---|
| Bir özelliği kapatmak için "Safari" aramak | if ('share' in navigator) gibi özellik denetimleri |
| User agent'a göre mobil site sunmak | CSS medya sorgularıyla duyarlı tasarım |
| Dizeye bakarak "botları" engellemek | Hız sınırlama ve davranışa dayalı tespit |
| İndirme için işletim sistemini tespit etmek | Tüm indirmeleri sunun, istemci ipuçlarına veya dizeye göre birini önceden seçin |
SSS
User agent'ım nedir?
Sayfayı açtığınızda çözümleyici bunu doğrudan tarayıcınızdan okuyarak gösterir.
Chrome'un dizesi neden Safari ve Mozilla'dan söz ediyor?
Uyumluluk için. Tarayıcılar, bu adları arayan sitelerin kendilerini engellememesi amacıyla eski tarayıcılardan simgeleri kopyaladı.
Bir web sitesi user agent'a güvenebilir mi?
Hayır. Herhangi bir istemci herhangi bir dizeyi gönderebilir. Bunu istatistik ve tanılama için bir ipucu olarak kullanın, güvenlik kararları için değil.
macOS ya da Android sürümüm neden yanlış görünüyor?
Tarayıcılar gizlilik için dizenin bazı bölümlerini sadeleştirir ve dondurur. Ayrıntılı sürümler yalnızca site açıkça istediğinde istemci ipuçları üzerinden gelir.
Botlar nasıl tespit edilir?
Bilinen tarama botu adlarıyla, ayrıca yaygın betik ve kitaplık simgeleriyle. Kendini tarayıcı gibi gösteren botlar yalnızca dizeye bakarak tespit edilemez.
İstemci ipuçları nedir?
Chromium tabanlı tarayıcıların yapılandırılmış tarayıcı bilgisiyle gönderdiği Sec-CH-UA ve Sec-CH-UA-Platform gibi başlıklar; User-Agent dizesinin bazı bölümlerinin yerini alırlar.
User agent'ım bir yere yükleniyor mu?
Bu araç tarafından değil; çözümleme sayfanın içinde yapılır. Her web sitesinde olduğu gibi XGM sunucusu da başlığı normal isteklerin parçası olarak alır.
Gizlilik için user agent'ımı değiştirmeli miyim?
Değiştirmek sizi daha az değil daha ayırt edilebilir yapabilir ve siteleri bozabilir. Tarayıcının gizlilik özellikleri ve izleyici engelleme genellikle daha çok işe yarar.
Bir iPad neden kendini Mac olarak bildiriyor?
iPad'deki Safari varsayılan olarak masaüstü sitelerini ister ve macOS biçiminde bir User-Agent dizesi gönderir. JavaScript'teki dokunma desteği denetimleri ikisini dizeden daha iyi ayırt eder.
Mobil uygulamalar user agent gönderir mi?
Evet. Uygulamalar genellikle HTTP kitaplıklarının varsayılanını ya da uygulama adı ile sürümünü taşıyan özel bir dize gönderir; bu da günlüklerde uygulama trafiğini tanımayı kolaylaştırır.
curl ile user agent nasıl ayarlanır?
-A seçeneğini kullanın, örneğin curl -A "my-monitor/1.0 (+https://example.com/bot)" https://example.com. Betiklerinizi dürüstçe tanıtın ki site sahipleri size ulaşabilsin.