1 पॉइंट द्वारा GN⁺ 1 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Susam Pal ने Chris Morgan का लेख query string पर प्रतिबंध लगाया पढ़ने के बाद Wander Console में जोड़ा गया via= query parameter हटा दिया
  • Wander Console एक distributed, self-hosted web console है जो personal website visitors को community द्वारा सुझाए गए pages को random तरीके से explore करने देता है; अभी इसे 50 से अधिक websites host कर रही हैं और यह 1500 से अधिक webpages recommend करता है
  • via= फीचर सुझाई गई website के operator को access logs में visit source देखने देता था, लेकिन यह https://midnight.pub/?via=https://susam.net/wander/ की तरह destination URL को सीधे बदलने के तरीके पर आधारित था
  • query string जोड़ने से नया URL बन जाता है, जो किसी और resource की ओर इशारा कर सकता है या 404 दे सकता है; इसने वास्तव में int10h.org की font page जैसी sites को तोड़ दिया, जो query string को अपने identifier के रूप में इस्तेमाल करती हैं
  • browser में पहले से ही Referer और Referrer-Policy मौजूद हैं, जो source information भेजने को control करते हैं, इसलिए Wander Console 0.6.0 से यह दूसरे लोगों के URL में referral source के लिए query string नहीं जोड़ता

Chris Morgan की query string पर की गई आलोचना से यह बदलाव शुरू हुआ

  • Susam Pal ने Chris Morgan का लेख query string पर प्रतिबंध लगाया पढ़कर अपने प्रोजेक्ट Wander Console में जोड़ा गया via= query parameter हटा दिया
  • Chris Morgan नहीं चाहते कि कोई और उनके URL में https://chrismorgan.info/no-query-strings?ref=example.com की तरह tracking information जोड़ दे
  • अगर source information चाहिए, तो HTTP Referer header देखा जा सकता है; और अगर वह header नहीं है, तो उसके पीछे कोई सही वजह होने की संभावना है
  • Susam Pal ने पहले Hacker News पर Chris Morgan द्वारा अपने CSS boilerplate rules पर दी गई विस्तृत प्रतिक्रिया से link underline बनाए रखने और visited links का बैंगनी रंग बनाए रखने जैसे सबक सीखे थे
  • इसके बाद वह Chris Morgan के web संबंधी लेख और feedback पढ़ते रहे, और Lobsters पर RSS में author context जोड़ना पर हाल की टिप्पणी को भी उपयोगी उदाहरण मानते हैं

Wander Console की संरचना और उद्देश्य

  • Wander Console एक छोटा, distributed और self-hostable web console है जो personal website visitors को independent personal website operators की community द्वारा सुझाई गई interesting websites और pages खोजने देता है
  • Susam Pal का console susam.net/wander/ पर है, और Wander button दबाने पर यह Wander community द्वारा सुझाया गया कोई random personal webpage लोड करता है
  • यह टूल एक HTML file से बना है जो console को implement करती है, और एक JavaScript file से जिसमें site operator neighbor consoles की list और recommended webpages की list define करता है
  • इन दो files को web server पर copy करने के बाद यह सामान्य web server पर चल सकता है; किसी अलग server-side logic या server-side software की जरूरत नहीं होती
  • इसे Codeberg Pages या GitHub Pages जैसे सीमित environments में भी host किया जा सकता है
  • Wander button दबाने पर console दूसरे remote consoles से जुड़ता है, webpage recommendations लाता है, फिर उनमें से एक को random चुनकर browser में लोड करता है
  • यह कुछ हद तक अब बंद हो चुके StumbleUpon जैसा है, लेकिन यह पूरी तरह distributed है
  • यह web ring जैसा भी थोड़ा है, लेकिन community network किसी circular structure तक सीमित नहीं है और किसी भी graph structure में हो सकता है
  • अभी 50 से अधिक websites इस टूल को host कर रही हैं, और मिलकर 1500 से अधिक webpages recommend करती हैं
  • ज्ञात consoles और recommended pages का हालिया snapshot susam.codeberg.page/wcn/ पर देखा जा सकता है
  • टूल के बारे में अधिक जानने या इसे अपनी website पर सेट करने के लिए codeberg.org/susam/wander देखें

via= query parameter: एक गलत फीचर

  • Wander Console 0.4.0 में webpages लोड करते समय via= query parameter जोड़ने वाला फीचर जोड़ा गया था
  • उदाहरण के लिए, susam.net/wander/ console पर midnight.pub मिलने पर page इस URL से लोड होता था
https://midnight.pub/?via=https://susam.net/wander/
  • इस तरीके से recommended website का operator access logs में देख सकता था कि visit Wander Console से आया है
  • यह फीचर Codeberg पर एक feature request देखकर जोड़ा गया था, लेकिन शुरू में इसे लेकर हिचकिचाहट थी
  • उस समय algebraic graph theory research की deadline पास थी, और Wander Console का अधिकांश हिस्सा भी research के दौरान छोटे break में बनाया गया था
  • console का पहला version एक सुबह लगभग 1 घंटा 30 मिनट में बनाया गया था, और via= फीचर भी ऐसे ही एक छोटे break में implement हुआ था
  • Susam Pal छोटे hobby projects में लगातार features जोड़ने के बजाय scope सीमित रखने और essential requirements पूरी होने पर features को complete मानकर छोड़ देने वाली maintenance style पसंद करते हैं
  • फिर भी, थकान और intense research work के कारण वह इस feature request को नज़रअंदाज़ नहीं कर सके
  • via= फीचर में इसे disable करने की setting थी, लेकिन बाद में उन्होंने इसे भी गलती माना
  • संदिग्ध फीचर्स, अगर implement किए भी जाएँ, तो default-on के बजाय explicit opt-in होने चाहिए
  • Jurassic Park की यह पंक्ति इस स्थिति पर फिट बैठती है: “आप यह कर सकते हैं या नहीं, इसी में इतने व्यस्त थे कि यह नहीं सोचा कि आपको यह करना भी चाहिए या नहीं”

Query string वास्तव में URL को तोड़ सकती है

  • via= फीचर implement करने के बाद, उनकी पसंदीदा websites में से एक का एक page console में लोड नहीं हुआ
  • समस्या वाले page के मिलते-जुलते लेकिन थोड़ा अलग URLs ये थे
  • पहले और दूसरे URL सामान्य रूप से लोड होते हैं, लेकिन तीसरा URL HTTP 404 error page लौटाता है
  • वह website query string का इस्तेमाल यह तय करने के लिए करती है कि कई font collections में से कौन-सा दिखाना है
  • कोई भी मनमानी query string जोड़ने पर site उसे font collection identifier की तरह समझने की कोशिश करती है, इसलिए page load fail हो जाता है
  • जब Wander Console ने पहले URL में via= query parameter जोड़ा, तो उसी वजह से page टूट गया
  • URL बदलने पर, चाहे query string जोड़ना छोटा बदलाव लगे, वह नया URL बन जाता है
  • नया URL पूरी तरह अलग resource की ओर इशारा कर सकता है, या किसी भी resource की ओर नहीं
  • Susam Pal का मानना है कि via= query string जोड़कर उन्होंने अपनी पसंदीदा websites में से एक के सही URL को तोड़ दिया

Referer और Referrer-Policy को bypass करने की समस्या

  • web browser में source information के लिए HTTP Referer header पहले से मौजूद है
  • इस header को Referrer-Policy नियंत्रित करती है
  • Referrer-Policy को server level, document level और individual link level पर set किया जा सकता है
  • web standards पहले से ही यह तय करने के लिए जानबूझकर बनाए गए controls देते हैं कि source information किस सीमा तक भेजी जाए
  • URL में referral source के लिए query string जोड़ने का तरीका इन controls को bypass करता है
  • यानी privacy और attribution का मामला referrer mechanism के बाहर निकालकर सीधे destination URL में embed कर दिया जाता है
  • उनका निष्कर्ष है कि किसी HTML tool को इस तरह URL नहीं बदलना चाहिए
  • उपयोगकर्ता की ओर से URL बदलकर referral source query string डालना भी सही नहीं है

फीचर हटाना और आगे का सिद्धांत

  • Wander Console से referral source query string फीचर हटा दिया गया
  • इस फीचर को explicit opt-in option के रूप में छोड़ा जा सकता था, लेकिन इसे गलत फीचर मान लेने के बाद वह इसे किसी भी रूप में software में नहीं रखना चाहते थे
  • प्रोजेक्ट अभी नया है और 0.x release stage में है, इसलिए उनके अनुसार फीचर हटाने का यह सही समय था
  • Chris Morgan का लेख query string पर प्रतिबंध लगाया feed reader में दिखने के बाद उन्होंने research से थोड़ा समय निकालकर यह फीचर हटा दिया
  • यह removal commit b26d77c में देखा जा सकता है
  • latest release 0.6.0 में यह फीचर अब शामिल नहीं है
  • आगे अगर वह किसी नए hobby project में URLs लोड करेंगे, तो उनका सिद्धांत रहेगा कि उन्हें website author की मंशा के अनुसार ही लोड किया जाए
  • वह इस निष्कर्ष पर पहुँचे हैं कि दूसरे लोगों के URL में query string नहीं जोड़नी चाहिए

1 टिप्पणियां

 
GN⁺ 1 시간 전
Lobste.rs की टिप्पणियाँ
  • यह बताने के लिए धन्यवाद कि मेरी पोस्ट ने कैसे मदद की। मैं विस्तार से रिव्यू कई वजहों से लिखता हूँ: अपनी संतुष्टि के लिए, मूल प्रोजेक्ट की मदद के लिए, कभी डेवलपर दिलचस्पी दिखाते हैं और कभी नहीं, और कभी इसलिए भी कि इंटरनेट पर कोई गलत था
    लेकिन सबसे बड़ी वजह यह है कि मुझे सिखाना पसंद है, और मैं जानता हूँ कि दूसरे लोग ये रिव्यू पढ़ते हैं। सच में, मेरे रिव्यू लगातार सबसे ज़्यादा upvote पाने वाली टिप्पणियों में शामिल रहते हैं
    कभी-कभी किसी अनजान व्यक्ति की तरफ़ से छोड़ी गई धन्यवाद-टिप्पणी को मैं सच में बहुत महत्व देता हूँ, और इस तरह का विस्तृत आभार और भी गर्मजोशी भरा महसूस होता है
    मज़ेदार बात यह है कि जनवरी में मुझे आपकी साइट मिली थी और मुझे खास तौर पर “more purple links, please” बहुत पसंद आया था, लेकिन आज पता चला कि मुझे जाने बिना ही मैं आपके रुख़ को प्रभावित कर चुका था
    मैंने कल एक नई वेबसाइट लॉन्च की है, और आगे चलकर कई माध्यमों में काफ़ी ज़्यादा रिव्यू पोस्ट करने का इरादा है। पिछले महीने मैंने इस योजना के बारे में थोड़ा लिखा था: https://lobste.rs/s/vpdpkq/llm_reviews_cargo_crev#c_8uk441
    यह भी थोड़ा हैरान करने वाला था कि पहले से ही एक और पेज का उदाहरण मौजूद था जो अतिरिक्त query string पर एलर्जिक प्रतिक्रिया देता है। उस साइट पर सिर्फ़ वही पेज subpage routing के लिए ?1, ?2, ?3, ?4 जैसे query string इस्तेमाल करता है, जबकि बाकी पेज query string स्वीकार करते हैं। क्रमिक pagination साफ़ तौर पर hierarchical है, इसलिए URL की भावना से यह मेल नहीं खाता, लेकिन ?page=1 जैसा तरीका आम भी है
    कौन-सा status code लौटाया जाए, यह तय करते समय मुझे चिंता थी कि कहीं 404 गलत मान्यताओं की वजह से side effect न पैदा कर दे, लेकिन शायद वह चिंता ज़रूरत से ज़्यादा थी। मैं भूल गया था कि वेब का काफ़ी बड़ा हिस्सा path का अर्थपूर्ण उपयोग नहीं करता

    • क्या आपने अनधिकृत query string के लिए "418 I'm not a teapot" response लौटाने पर विचार नहीं किया?
  • बढ़िया। Wander console शानदार तरीके से आगे बढ़ रहा है, और यहाँ Susam जो बारीकी दिखाते हैं, वही इसके काम करने की बड़ी वजह लगती है
    मैंने अपने URL पर भी अनचाहे query string जुड़ने के कुछ रूप देखे हैं। Programmer Weekly newsletter query जोड़ता है, लेकिन referer header भी होता है, इसलिए वह दोहराव है
    एक और मामला ऐसा है जिसमें लगता है कि हर subscriber के लिए एक unique ID जुड़ती है, जो मुझे बिल्कुल नहीं चाहिए। परेशानी की बात यह है कि referer नहीं होता, इसलिए यह भी नहीं पता चलता कि कौन-सी साइट ऐसा कर रही है
    /blog/modeling-on-demand-pricing/?ck_subscriber_id=<unique-id>

  • मैं इस बात से सहमत होना चाहूँगा कि “अगर जानना है तो Referer header देख लो, और अगर वह नहीं है तो शायद उसकी कोई वजह होगी,” लेकिन Referer कई सालों से किसी न किसी हद तक टूटा हुआ या बेकार-सा रहा है। ऐसी चीज़ें पैदा होने की यही एकमात्र वजह है

    • आपका मतलब कैसे?
  • “क्यों जोड़ा? क्योंकि मैंने जन-आवश्यकता के सामने घुटने टेक दिए” — क्या वाकई? वह तो बस एक हल्की-सी टिप्पणी थी जिसे एक असंबंधित issue पर 5 upvote मिले थे। झुकने से पहले लड़ाई बहुत कठिन नहीं रही होगी ;-)

    • मुझे ठीक से समझ नहीं आ रहा कि यहाँ ‘हल्की-सी टिप्पणी’ से आपका क्या मतलब है। वह टिप्पणी ऐसे व्यक्ति ने छोड़ी थी जिसने मेरा software सच में इस्तेमाल किया, उसे अपनी वेबसाइट पर install किया, और उस साइट को community network का हिस्सा बनाया। मैं उसे ‘हल्का’ नहीं कहूँगा
      जब इस प्रोजेक्ट के सिर्फ़ लगभग दस user थे, तब अगर किसी नए feature suggestion को 5 upvote मिलते, तो वह मुझे जन-आवश्यकता जैसा ही लगता
      मेरे प्रोजेक्ट आम तौर पर शौक़ में बनाए गए छोटे tools होते हैं। कुछ अपवादों को छोड़कर, उनके ज़्यादा user नहीं होते। इसलिए जब मुझे feature request या bug report मिलती है, तो चाहे वह संबंधित issue पर हो या असंबंधित issue पर, वह मेरे लिए महत्वपूर्ण होती है। मैं हमेशा तुरंत उस पर काम नहीं कर पाता, लेकिन कौन-सी request को ज़्यादा मांग मिली, यह मैं अपने मन में दर्ज रखता हूँ