User-Agent स्ट्रिंग और Client Hints: क्या उजागर करते हैं और क्या फ़्रीज़ हुआ

यूज़र एजेंट स्ट्रिंग वेब पर सबसे पुराना पहचान संकेत है और पिछले कुछ वर्षों में सबसे ज़्यादा बदला है। इसे अच्छी तरह पढ़ने का मतलब है यह जानना कि उसमें अब भी क्या है, जानबूझकर क्या फ़्रीज़ किया गया, और हटाया गया विवरण कहाँ गया।
स्ट्रिंग क्या कहती है
Windows पर आज की Chromium स्ट्रिंग कुछ ऐसी दिखती है: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36। ऐतिहासिक टोकन (Mozilla/5.0, AppleWebKit, like Gecko, Safari) दशकों पहले लिखी स्क्रिप्टों से अनुकूलता के लिए हैं और कोई जानकारी नहीं रखते। काम के हिस्से हैं प्लेटफ़ॉर्म (Windows NT 10.0, Windows 11 पर भी), आर्किटेक्चर और ब्राउज़र का मुख्य वर्शन।
जो पहले वहाँ था उसे जानबूझकर हटाया गया है। माइनर और पैच वर्शन अब 0.0.0 है। Windows वर्शन 10.0 पर पिन है। Android स्ट्रिंग में अब डिवाइस मॉडल नहीं होता। यह वही "यूज़र एजेंट रिडक्शन" है जो Chromium ने 2022 और 2023 के बीच लागू किया, ठीक इसलिए कि स्ट्रिंग फ़िंगरप्रिंटिंग की सतह बन गई थी।
Client Hints: वही डेटा, माँगने पर
हटाया गया विवरण गायब नहीं हुआ; वह User-Agent Client Hints में चला गया। सर्वर Accept-CH हेडर से खास फ़ील्ड माँग सकता है, और ब्राउज़र फिर बाद की रिक्वेस्टों पर Sec-CH-UA-Platform-Version या Sec-CH-UA-Model जैसे हेडर भेजता है। कम-एंट्रॉपी वाले संकेत (ब्रांड और मुख्य वर्शन, प्लेटफ़ॉर्म, मोबाइल फ़्लैग) डिफ़ॉल्ट रूप से भेजे जाते हैं। ज़्यादा-एंट्रॉपी वाले (पूरा वर्शन, आर्किटेक्चर, बिटनेस, मॉडल, प्लेटफ़ॉर्म वर्शन) सिर्फ़ उन साइटों को भेजे जाते हैं जो माँगें, और स्क्रिप्ट वही सेट navigator.userAgentData.getHighEntropyValues() के ज़रिए माँग सकती है।
डिज़ाइन का लक्ष्य यह है कि साइट को घोषित करना पड़े कि वह क्या चाहती है, जिससे संग्रह दिखाई देने वाला और जाँचने योग्य बनता है। व्यवहार में, फ़िंगरप्रिंट करना चाहने वाली साइट अब भी सब कुछ माँग सकती है; फ़र्क यह है कि माँगना ऐसी रिक्वेस्ट है जिसे ब्राउज़र देख सकता है, लॉग कर सकता है या अस्वीकार कर सकता है।
एकरूपता की समस्या
क्योंकि वही तथ्य अब दो स्रोतों से उपलब्ध हैं, उनकी तुलना की जा सकती है। जो ब्राउज़र अपनी यूज़र एजेंट स्ट्रिंग को macOS का दावा करने के लिए बदलता है लेकिन navigator.userAgentData.platform में Windows ही रहने देता है, उसने ऐसा विरोधाभास बना दिया है जिसे पकड़ना मामूली है। यही बात navigator.platform प्रॉपर्टी, पेज को दिखने वाले OS-विशिष्ट फ़ॉन्ट, और WebGL रेंडरर स्ट्रिंग पर लागू होती है, जो ऐसे ग्राफ़िक्स ड्राइवर का नाम लेती है जो सिर्फ़ एक ऑपरेटिंग सिस्टम पर होता है। सिर्फ़ स्ट्रिंग को स्पूफ़ करना सालों से हारने वाली रणनीति रही है।
अपना खुद का पढ़ना
डायग्नोस्टिक कच्ची स्ट्रिंग दिखाता है, उससे निकाला गया ब्राउज़र और वर्शन, और इंजन (Blink, Gecko या WebKit)। ध्यान दें कि iOS पर हर ब्राउज़र WebKit बताता है, ब्रांड चाहे जो कहे, क्योंकि Apple यही ज़रूरी करता है। अगर पार्स हुआ ब्राउज़र का नाम आपको चौंकाता है, तो स्ट्रिंग को कोई एक्सटेंशन या प्रोफ़ाइल सेटिंग बदल रही है; यह समस्या है या नहीं, इस पर निर्भर करता है कि बाकी ब्राउज़र उस बदलाव से सहमत है या नहीं।


