User-Agent — HTTP client o‘zini serverga tanishtirish uchun yuborishi mumkin bo‘lgan request header. Browser, bot, command-line tool, mobil application yoki boshqa client bu header orqali product nomi, versioni, platformasi va rendering engine haqida ma’lumot berishi mumkin.
Headerning aniq ko‘rinishi clientga bog‘liq. U tarixiy compatibility sabab murakkab va bir nechta product tokenlardan tashkil topishi mumkin.
Oddiy ko‘rinish
Misol:
User-Agent: ExampleBrowser/10.0
Amaliy browser headerlari ko‘proq ma’lumot va tarixiy tokenlarga ega bo‘lishi mumkin.
Server headerni oddiy string sifatida oladi.
Product token
User-Agent sintaksisida product nomi va versioni:
Product/Version
ko‘rinishida yozilishi mumkin.
Bir header ichida bir nechta product token va comment bo‘lishi ehtimoli bor.
Har token haqiqiy capability’ni kafolatlamaydi.
Browser compatibility tarixi
Web saytlar ayrim browser nomlariga qarab content yuborgan.
Browserlar boshqa mashhur browser tokenlarini headerga qo‘shib, mos sahifa olishga harakat qilgan.
Natijada zamonaviy User-Agent stringlar tarixiy va takroriy nomlarga boy bo‘lib qolgan.
Platform ma’lumoti
Header quyidagilar haqida signal berishi mumkin:
- operatsion tizim;
- CPU architecture;
- mobil yoki desktop;
- browser engine;
- browser version;
- bot nomi.
Privacy va fingerprintingni kamaytirish uchun browser bu ma’lumotni umumlashtirishi mumkin.
User-Agent sniffing
Server yoki JavaScript string ichidan browser nomi va versionini taxmin qilishi User-Agent sniffing deb ataladi.
Bu yondashuv muammolari:
- header spoof qilinadi;
- yangi browser tanilmaydi;
- tokenlar tarixiy;
- platforma o‘zgaradi;
- privacy reduction;
- maintenance qiyin.
Feature detection ko‘p holatda yaxshiroq.
Feature detection
Application kerakli imkoniyatni bevosita tekshiradi:
if ("serviceWorker" in navigator) {
// imkoniyat mavjud
}
Bu browser nomini taxmin qilishdan ko‘ra real capability’ni ko‘rsatadi.
Biroq API mavjud bo‘lib, qisman bugli implementation bo‘lishi mumkin.
Server-side foydalanish
- mobile layoutga oid signal;
- bot detection;
- log tahlili;
- compatibility;
- download varianti;
- analytics;
- abuse scoring
uchun foydalanishi mumkin.
Muhim access qarori faqat shu headerga tayanmaydi.
Bot va crawler
Crawlerlar o‘z nomi va contact URLini User-Agentda ko‘rsatishi mumkin.
Masalan, search engine bot.
Attacker ayni stringni yozib o‘zini qonuniy botdek ko‘rsatishi mumkin.
Bot verification reverse DNS, IP range yoki cryptographic usulga tayanishi mumkin.
Command-line client
curl, wget, SDK va API clientlar o‘z User-Agentini yuborishi mumkin.
API provider version adoption va muammo diagnostikasida bu ma’lumotdan foydalanadi.
Client product nomi bilan birga application versionini yuborishi supportni yengillashtiradi.
Custom User-Agent
Non-browser application custom qiymat yozishi mumkin:
UzbekDevsMobile/2.4
Unda secret, user ID yoki personal data bo‘lmasligi kerak.
Header proxy va server loglarida saqlanishi mumkin.
Spoofing
User-Agent client tomonidan boshqariladi.
Browser extension, automation yoki HTTP library uni o‘zgartirishi mumkin.
Shuning uchun:
- authorization;
- licensing;
- admin access;
- botga to‘liq ishonch
faqat User-Agent bilan belgilanmaydi.
Fingerprinting
User-Agent boshqa signal bilan birga device fingerprint yaratishda ishlatilishi mumkin.
Masalan:
- screen;
- language;
- timezone;
- font;
- hardware;
- IP.
Browserlar entropy’ni kamaytirish va user privacy’sini yaxshilash uchun stringni qisqartirishi mumkin.
User-Agent Client Hints
Client Hints browser va platforma ma’lumotini structured headerlarda berishga qaratilgan.
Server kerakli hintlarni so‘rashi mumkin.
Low-entropy signal default yuborilishi, yuqori entropy qiymatlar esa policy va permissionga bog‘liq bo‘lishi mumkin.
Bu klassik uzun stringni bosqichma-bosqich kamaytirishga yordam beradi.
Accept-CH
Server response’da kerakli client hintlarni:
Accept-CH: Sec-CH-UA-Platform
kabi header bilan so‘rashi mumkin.
Keyingi requestlarda browser tegishli hintni yuborishi ehtimoli bor.
Cache Vary va privacy talablari hisobga olinadi.
JavaScript
Browser environmentda:
navigator.userAgent
qiymati mavjud bo‘lishi mumkin.
Bu serverga yuborilgan header bilan aynan teng bo‘lishi shart emas.
Zamonaviy API structured userAgentDataga oid imkoniyatlarni berishi mumkin.
Log va analytics
haqida signal beradi.
Parser library muntazam yangilanadi.
Noma’lum string “zararli” deb avtomatik belgilanmaydi.
Security detection
Noodatiy User-Agent avtomatlashtirilgan scan yoki malware indikatori bo‘lishi mumkin.
Ammo attacker uni mashhur browserga almashtirishi oson.
Detection:
- request pattern;
- TLS fingerprint;
- header tartibi;
- behavior;
- identity;
- rate
bilan boyitiladi.
Cache varianti
Server User-Agentga qarab boshqa HTML yoki image bersa cache response’larni to‘g‘ri ajratishi kerak. Vary: User-Agent juda ko‘p cache variant yaratib hit rate’ni kamaytirishi mumkin. Responsive design va client-side capability ko‘p holatda server-side UA branchingdan sodda.
Version block
Juda eski clientni bloklash zarur bo‘lsa faqat string parserga tayanish noaniq. Application minimal protocol yoki API capability’ni tekshiradi, userga update xabari beradi. Security patch talab qiladigan native client signed version metadata bilan boshqarilishi mumkin.
Privacy reduction
Browser major version va platform detailini kamaytirsa analyticsdagi segmentlar o‘zgaradi. Tashkilot tracking uchun boshqa yuqori entropy fingerprintlarni yashirin yig‘ishga o‘tmasligi kerak.
Header uzunligi
Juda uzun yoki noto‘g‘ri User-Agent log va parserga ortiqcha yuk berishi mumkin. Server header hajmini umumiy request limiti bilan cheklaydi.
Bog‘liq tushunchalar
User-Agent header, HTTP client, Browser detection, Feature detection, Client Hints, navigator.userAgent, Bot detection, Device fingerprinting, HTTP header