Google while(1); को JSON में क्यों डालता है और कैसे धोखा खाने से बचें: JavaScript डेवलपर्स की शीर्ष गलतियाँ
\n\nयदि आपने कभी Google API के साथ काम करते समय या बस सर्वर से अजीब प्रतिक्रियाओं को गूगल करते समय डेवलपर कंसोल में देखा है, तो आपने निश्चित रूप से कुछ इस तरह देखा होगा:
\n\nwhile(1);["some","data"]\n\nयह एक अनंत लूप जैसा दिखता है जो ब्राउज़र को हैंग कर देगा, है ना? लेकिन वास्तव में यह एक शानदार सुरक्षा तंत्र है। आइए समझते हैं, Google JSON में while(1) क्यों जोड़ता है, ऐसे प्रतिक्रियाओं के साथ काम करते समय डेवलपर्स कौन सी गलतियाँ करते हैं और उनसे कैसे बचें।
\n\nयह प्रश्न Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है (हज़ारों व्यूज़), और यह उचित भी है। यह न केवल तकनीकी बारीकियों को छूता है, बल्कि वेब सुरक्षा के मूलभूत सिद्धांतों को भी छूता है।
\n\nJSON में while(1); क्या है और यह कहाँ से आया?
\n\nचलिए मुख्य बात से शुरू करते हैं। Google JSON में while(1) जोड़ता है आपके कोड को तोड़ने के लिए नहीं, बल्कि JSON Hijacking (JSON अपहरण) नामक हमले से बचाने के लिए।
\n\nपुराने दिनों की कल्पना करें जब साइटें शीर्ष-स्तरीय JSON ऐरे का उपयोग करती थीं (जैसे, [{"user":"admin","token":"secret"}])। एक हमलावर वैश्विक कंस्ट्रक्टर Array या Object को ओवरराइड कर सकता था और <script> टैग के माध्यम से डेटा चुरा सकता था। ब्राउज़र JSON को JavaScript के रूप में निष्पादित करता था, और डेटा लीक हो जाता था।
Google का समाधान - उपसर्ग while(1); जोड़ना। यह JSON को अमान्य JavaScript बनाता है (अनंत लूप दुर्भावनापूर्ण स्क्रिप्ट को निष्पादित नहीं होने देगा), लेकिन साथ ही JSON स्वयं सही रहता है - बस इसे उपसर्ग हटाकर सही ढंग से पार्स करने की आवश्यकता है।
अब यह अभ्यास कई बड़े API के लिए सुरक्षा मानक बन गया है। लेकिन यदि आप इसके बारे में नहीं जानते हैं, तो आपका कोड टूट सकता है।
\n\nसुरक्षित JSON के साथ काम करते समय JavaScript डेवलपर्स की शीर्ष 5 गलतियाँ
\n\nगलती #1: प्रतिक्रिया को ज्यों का त्यों पार्स करने का प्रयास
\n\nसबसे आम गलती - डेवलपर सर्वर से प्रतिक्रिया प्राप्त करता है और इसे सीधे JSON.parse() में डाल देता है। परिणाम - पार्सिंग त्रुटि, क्योंकि while(1); मान्य JSON नहीं है।
fetch('https://api.google.com/some-endpoint')\n .then(response => response.text())\n .then(data => {\n // त्रुटि! JSON.parse विफल हो जाएगा\n const parsed = JSON.parse(data);\n console.log(parsed);\n })\n .catch(err => console.error('पार्सिंग त्रुटि:', err));\n\n\nकैसे बचें: पार्सिंग से पहले हमेशा उपसर्ग while(1); हटाएं।
fetch('https://api.google.com/some-endpoint')\n .then(response => response.text())\n .then(data => {\n // सुरक्षा उपसर्ग हटाएं\n const cleanJson = data.replace(/^\\)?\\s*while\\s*\\(\\s*1\\s*\\)\\s*;\\s*/, '');\n const parsed = JSON.parse(cleanJson);\n console.log(parsed);\n })\n .catch(err => console.error('पार्सिंग त्रुटि:', err));\n\n\nगलती #2: बिना प्रोसेसिंग के response.json() का उपयोग
\n\nFetch API में response.json() विधि शुद्ध JSON की अपेक्षा करती है। यदि सर्वर while(1);... लौटाता है, तो response.json() एक अपवाद फेंक देगा। डेवलपर्स अक्सर सोचते हैं कि यह API का बग है, न कि सुरक्षा विशेषता।
// यह कोड "Unexpected token w" त्रुटि के साथ विफल होगा\nfetch('https://api.google.com/endpoint')\n .then(response => response.json()) // त्रुटि!\n .then(data => console.log(data));\n\n\nकैसे बचें: response.text() का उपयोग करें और फिर मैन्युअल रूप से उपसर्ग हटाएं।
fetch('https://api.google.com/endpoint')\n .then(response => response.text())\n .then(text => {\n const jsonText = text.replace(/^\\)?\\s*while\\s*\\(\\s*1\\s*\\)\\s*;\\s*/, '');\n return JSON.parse(jsonText);\n })\n .then(data => console.log(data));\n\n\n