रिमोट होस्ट किए गए कोड से जुड़े उल्लंघनों से निपटें

दूर से होस्ट किया गया कोड या RHC, वह कोड है जिसे Chrome वेब स्टोर कॉल करता है को उस ब्राउज़र द्वारा एक्ज़ीक्यूट किया जाता है जिसे एक्सटेंशन चुनें. JavaScript और WASM जैसी चीज़ें. इसमें यह शामिल नहीं है डेटा या JSON या CSS जैसी चीज़ों के लिए बनाया गया है.

आरएचसी को अब अनुमति क्यों नहीं दी गई है?

मेनिफ़ेस्ट V3 एक्सटेंशन के साथ अब उन सभी कोड को बंडल करना होगा जिनका वे इस्तेमाल कर रहे हैं एक्सटेंशन चुन सकता है. पहले, आप डाइनैमिक तरीके से स्क्रिप्ट टैग इंजेक्ट कर सकते थे वेब पर मौजूद किसी भी यूआरएल पर क्लिक करें.

मुझे बताया गया था कि मेरे एक्सटेंशन में आरएचसी है. आपको कम्यूनिटी दिशा-निर्देशों और नीतियों का उल्लंघन करने वाला किस तरह का कॉन्टेंट मिला?

अगर समीक्षा के दौरान आपके एक्सटेंशन को Blue Argan की गड़बड़ी के साथ अस्वीकार किया गया था, तो हमारे समीक्षकों का मानना है कि आपका एक्सटेंशन रिमोट तरीके से होस्ट किए गए कोड का इस्तेमाल कर रहा है. यह है आम तौर पर, यह तब नतीजा होता है, जब किसी रिमोट की मदद से स्क्रिप्ट टैग जोड़ने की कोशिश की जाती है (जैसे, ओपन वेब से, न कि एक्सटेंशन) या सीधे एक्ज़ीक्यूट करने के लिए संसाधन फ़ेच करना.

आरएचसी का पता लगाने का तरीका

एक बार जब आपको यह पता चल जाता है कि क्या खोजना है, तब आरएचसी का पता लगाना खास तौर पर मुश्किल नहीं होता. सबसे पहले, "http://" स्ट्रिंग की जांच करें या "https://" शामिल हुए. अगर आपके पास आरएचसी उल्लंघन हो सकता है, तो संभावित तौर पर इसकी पहचान करके उसका पता लगाया जा सकता है. अगर आपने आपके पास पूरा बिल्ड सिस्टम है या वह npm या किसी तीसरे पक्ष की डिपेंडेंसी का इस्तेमाल करता है पार्टी सोर्स, पक्का करें कि कोड का कंप किया गया वर्शन खोजा जा रहा हो, क्योंकि स्टोर इसका आकलन करता है. अगर आपको अब भी पेमेंट करने में परेशानी हो रही है, तो समस्या का पता लगाएं, तो अगला चरण वन स्टॉप सहायता से संपर्क करना है. वे खास तौर पर, उल्लंघनों के बारे में बताने के साथ-साथ, एक्सटेंशन जल्द से जल्द पब्लिश कर दिया जाएगा.

अगर कोई लाइब्रेरी कोड का अनुरोध कर रही है, तो क्या करना चाहिए

कोड चाहे कहीं से भी आए, RHC की अनुमति नहीं है. यह इसमें ऐसा कोड शामिल होता है जिसे आपने नहीं लिखा है. हालांकि, ऐसा सिर्फ़ आपकी प्रोजेक्ट. Firebase का इस्तेमाल करने वाले कुछ डेवलपर को रिमोट करते समय यह समस्या आई थी Firebase पुष्टि में इस्तेमाल करने के लिए कोड शामिल किया जा रहा था. भले ही यह एक पहले पक्ष (यानी Google के मालिकाना हक वाली) लाइब्रेरी का इस्तेमाल किया जा सकता है. आरएचसी के लिए कोई अपवाद नहीं दिया गया है. आपको इनकी ज़रूरत होगी कोड को कॉन्फ़िगर करने के लिए इस विकल्प का इस्तेमाल करें: सबसे पहले कोड शामिल करें. अगर आपको कोई ऐसी समस्या आती है जो आपका कोड नहीं है जो RHC लोड हो रहा है, लेकिन वह लाइब्रेरी जिसका आप उपयोग कर रहे हैं, तो कार्रवाई, लाइब्रेरी के लेखक से संपर्क करना है. उन्हें बताएं कि ऐसा हो रहा है, और इसे निकालने के लिए किसी समाधान या कोड को अपडेट करने का अनुरोध करें.

अगर आपको लाइब्रेरी के अपडेट होने का इंतज़ार नहीं है, तो क्या होगा

कुछ लाइब्रेरी, सूचना मिलने के तुरंत बाद अपडेट भेज देंगी, दूसरों को छोड़ दिया जाता है या समस्या को हल करने में समय लग सकता है. क्या पर निर्भर करते हुए उल्लंघन हो रहा है, तो आपको इंतज़ार करने की ज़रूरत नहीं पर जाएं और अनब्लॉक करें और सफल समीक्षा पूरी करें. कई बैकअप लेने और तेज़ी से चलाने के लिए विकल्प उपलब्ध हैं.

कोड को ऑडिट करें

क्या आपको पक्का है कि अनुरोध करने वाले कोड की ज़रूरत है? अगर यह हो सकता है या किसी लाइब्रेरी को हटाया जा सकता है जिसकी वजह से उसे हटाया जा सकता है, तो कोड और काम पूरा हो जाता है.

इसके अलावा, क्या कोई ऐसी लाइब्रेरी है जिसमें ये सुविधाएं मिलती हैं? आज़माएँ शर्तों को पूरा करने वाले अन्य विकल्पों के बारे में जानने के लिए, npmjs.com, GitHub या दूसरी साइटों पर जाएं इस्तेमाल के एक जैसे उदाहरण हो सकते हैं.

पेड़ के झटके

अगर आरएचसी उल्लंघन करने वाले कोड का इस्तेमाल नहीं किया जा रहा है, तो जिन्हें टूल की मदद से अपने-आप मिटाया जा सकता है. आधुनिक बिल्ड टूल जैसे webpack, Rollup, और Vite (इनमें कुछ और चीज़ें शामिल हैं) में एक सुविधा है पेड़ के झटके कहते हैं. बिल्ड सिस्टम पर चालू हो जाने के बाद, ट्री शेकिंग इस्तेमाल नहीं किए गए कोड पाथ हटा देने चाहिए. इसका मतलब यह हो सकता है कि आपके पास न सिर्फ़ ज़्यादा होने चाहिए, लेकिन यह वर्शन छोटा और तेज़ भी है! यह ज़रूरी है ध्यान रखें कि सभी लाइब्रेरी, ट्री को हिला नहीं सकती, लेकिन कई लाइब्रेरी हिलती-डुलती हैं. कुछ सूचनाएं मिल रही हैं रोलअप और वाइट जैसे टूल में डिफ़ॉल्ट रूप से ट्री शेकिंग चालू होता है. Webpack इसे चालू करने के लिए कॉन्फ़िगर करने की ज़रूरत होती है. अगर बिल्ड का इस्तेमाल नहीं किया जा रहा है सिस्टम को एक्सटेंशन के हिस्से के रूप में इस्तेमाल किया है, लेकिन कोड लाइब्रेरी का इस्तेमाल कर रहे हैं, तो हमें आपके वर्कफ़्लो में एक बिल्ड टूल जोड़ने की जांच करने के लिए प्रोत्साहित किया गया है. बिल्ड में ऐसे टूल शामिल किए जाते हैं जिनसे आपको ज़्यादा सुरक्षित, भरोसेमंद, और रखरखाव वाले प्रोजेक्ट लिखने में मदद मिलती है.

ट्रीहैकिंग को लागू करने का तरीका, आपके प्रोजेक्ट के हिसाब से तय होता है. हालांकि, रोलअप टूल से एक सामान्य उदाहरण लेने के लिए, ट्रीहैकिंग को कंपाइलेशन टूल बनाया जा सकता है. उदाहरण के लिए, अगर आपके पास कोई ऐसी फ़ाइल है जिसमें सिर्फ़ Firebase पुष्टि करने पर, इसे Main.js कहा जाता है:

import { GoogleAuthProvider, initializeAuth } from "firebase/auth";

chrome.identity.getAuthToken({ 'interactive': true }, async (token) => {
  const credential = GoogleAuthProvider.credential(null, token);
  try {
    const app = initializeApp({ ... });
    const auth = initializeAuth(app, { popupRedirectResolver: undefined, persistence: indexDBLocalPersistence });
    const { user } = await auth.signInWithCredential(credential)
    console.log(user)
  } catch (e) {
    console.error(error);
  }
});

इसके बाद, आपको सिर्फ़ रोलअप टूल की जानकारी देनी होगी. यह इनपुट फ़ाइल, लोड नोड फ़ाइलें @rollup/plugin-node-resolve और आउटपुट का नाम फ़ाइल बनाई जा रही है.

npx rollup --input main.js --plugin '@rollup/plugin-node-resolve' --file compiled.js

इस निर्देश को टर्मिनल विंडो पर चलाने पर, आपको जनरेट किया गया वर्शन मिलेगा हमारी main.js फ़ाइल में से, सभी को compiled.js नाम की एक फ़ाइल में कंपाइल किया जाता है.

रोलअप टूल को इस्तेमाल करना आसान हो सकता है. हालांकि, इसे बहुत कॉन्फ़िगर किया जा सकता है. सभी तरह के विज्ञापन जोड़े जा सकते हैं लॉजिक और कॉन्फ़िगरेशन के बारे में ज़्यादा जानें, तो बस उनका दस्तावेज़ देखें. इस तरह की बिल्ड टूल वाली सुविधा जोड़ने से, छोटा और बेहतर कोड मिलेगा. और इस मामले में, हमारी रिमोट तरीके से होस्ट किए गए कोड से जुड़ी समस्या को ठीक किया जाता है.

फ़ाइलों में अपने-आप बदलाव होने की सुविधा

रिमोट तरीके से होस्ट किया गया कोड आपके कोड बेस में जाने का ज़्यादा आम तरीका है आपके द्वारा प्रबंधित की जा रही है. अगर लाइब्रेरी X को यह करना हो किसी सीडीएन से import लाइब्रेरी Y के बाद भी, आपको इसे अपडेट करने के बाद भी अपडेट करना होगा इसे किसी लोकल सोर्स से लोड किया जाता है. मॉडर्न बिल्ड सिस्टम की मदद से, आसानी से गेम बनाएं प्लगिन का इस्तेमाल करें और उसे सीधे अपने कोड में इनलाइन करें.

इसका मतलब है कि दिया गया कोड जो ऐसा दिखता है:

import moment from "https://unpkg.com/moment@2.29.4/moment.js"
console.log(moment())

आपके पास एक छोटा रोलअप प्लगिन बनाने का विकल्प है.

import { existsSync } from 'fs';
import fetch from 'node-fetch';

export default {
  plugins: [{
    load: async function transform(id, options, outputOptions) {
      // this code runs over all of out javascript, so we check every import
      // to see if it resolves as a local file, if that fails, we grab it from
      // the network using fetch, and return the contents of that file directly inline
      if (!existsSync(id)) {
        const response = await fetch(id);
        const code = await response.text();

        return code
      }
      return null
    }
  }]
};

बिल्ड को नए प्लगिन की मदद से चलाने पर, हर रिमोट import यूआरएल पता चला है कि वह हमारा कोड, एक उप- निर्भरता थी या नहीं, सदस्यता के अलग-अलग लेवल पर लागू हो सकता है.

npx rollup --input main.js --config ./rollup.config.mjs --file compiled.js

फ़ाइलों में मैन्युअल तरीके से बदलाव करना

सबसे आसान विकल्प सिर्फ़ उस कोड को मिटाना है जिससे आरएचसी की समस्या हो रही है. इसमें खोले पर क्लिक करें. आम तौर पर, यह है नहीं लिखने की सलाह दी जाती है, क्योंकि यह नाज़ुक है और इसे भुलाया जा सकता है. यह "library.min.js" नाम की फ़ाइल होने पर अपने प्रोजेक्ट को बनाए रखना मुश्किल होता है नहीं है असल में Library.min.js. रॉ फ़ाइलों में बदलाव करने के बजाय, थोड़ा ज़्यादा बदलाव करें पैच-पैकेज जैसे टूल का इस्तेमाल किया जा सकता है. यह सुपर चैट है एक ऐसा शक्तिशाली विकल्प है जिससे आप फ़ाइल में बदलाव सेव कर सकते हैं फ़ाइल से मेल खाना चाहिए. इसे पैच फ़ाइलों पर बनाया जाता है. Git या Subversion जैसे वर्शन कंट्रोल सिस्टम को कंट्रोल करता है. आपको बस इनकी ज़रूरत है उल्लंघन करने वाले कोड को मैन्युअल रूप से बदलने, डिफ़रेंस फ़ाइल सेव करने, और पैच-पैकेज जिसमें वे बदलाव हैं जिन्हें आप लागू करना चाहते हैं. पूरा ट्यूटोरियल पढ़ा जा सकता है प्रोजेक्ट के रीडमी पर होनी चाहिए. अगर आपको किसी प्रोजेक्ट को पैच करना है, तो सच में हमारा सुझाव है कि आप प्रोजेक्ट में जाकर बदलाव करने का अनुरोध करें अपस्ट्रीम. पैच-पैकेज की मदद से पैच मैनेज करना बहुत आसान हो जाता है, लेकिन पैच करने के लिए कुछ भी बेहतर नहीं है.

कोड का इस्तेमाल न होने पर क्या करना चाहिए

कोड बेस बढ़ने पर, डिपेंडेंसी या डिपेंडेंसी या डिपेंडेंसी में से...) ऐसे कोड पाथ बनाए रख सकते हैं जिनका अब इस्तेमाल नहीं किया जा रहा है. अगर ऊपर दिए गए सेक्शन में इसमें RHC को लोड या एक्ज़ीक्यूट करने के लिए कोड शामिल है, तो इसे हटाना होगा. यह कोई बात नहीं. अगर इसका इस्तेमाल नहीं किया जा रहा है, तो इसे या तो ट्रीहैकिंग या लाइब्रेरी को हटाने के लिए पैच करके या पैच करके.

क्या इसका कोई समाधान है?

नहीं. आरएचसी की अनुमति नहीं है. हालांकि, ऐसी कुछ कंपनियां ऐसे मामलों में जहां इसकी अनुमति है. तकरीबन हमेशा ऐसे मामले होते हैं जहां किसी अन्य विकल्प के लिए संभव नहीं है.

उपयोगकर्ता स्क्रिप्ट API

यूज़र स्क्रिप्ट ऐसे छोटे कोड स्निपेट होते हैं जिन्हें आम तौर पर उपयोगकर्ता स्क्रिप्ट मैनेजर, जैसे कि TamperMonkey और हिंसक बंदर. इन मैनेजरों के लिए उस कोड को बंडल करना संभव नहीं है, उपयोगकर्ताओं ने लिखा है, इसलिए User Script API, कोड को एक्ज़ीक्यूट करने का तरीका बताता है उपयोगकर्ता की ओर से उपलब्ध कराया गया. यह इसका विकल्प नहीं है chrome.scripting.executeScript या दूसरे कोड काम करने के एनवायरमेंट. कुछ भी चलाने के लिए, उपयोगकर्ताओं को डेवलपर मोड चालू करना होगा. अगर Chrome वेब स्टोर की समीक्षा करने वाली टीम को लगता है कि इसका इस्तेमाल, गलत तरीके से किया जा रहा है के लिए लक्षित है (यानी उपयोगकर्ता द्वारा प्रदान किया गया कोड), तो इसे अस्वीकार किया जा सकता है या यह से हटा दिया गया.

chrome.debugger

chrome.debugger एपीआई, एक्सटेंशन को यह सुविधा देता है कि वे Chrome Devtools प्रोटोकॉल. यह वही प्रोटोकॉल है जिसका इस्तेमाल इसके लिए किया जाता है Chrome के Devtools और कई अन्य टूल. इसके साथ ही, एक्सटेंशन, रिमोट कोड का अनुरोध कर सकता है और उसे एक्ज़ीक्यूट कर सकता है. उपयोगकर्ता स्क्रिप्ट की तरह ही यह Chrome.scripting का एक विकल्प है. साथ ही, इसमें उपयोगकर्ताओं को बेहतर अनुभव मिलता है. जब इसका इस्तेमाल किया जा रहा होगा, तब उपयोगकर्ता को पेज के सबसे ऊपर एक चेतावनी बार दिखेगा विंडो. अगर बैनर बंद या खारिज कर दिया जाता है, तो डीबग करने का सेशन खत्म किया गया.

Chrome के पता बार का स्क्रीनशॉट, जिसमें 'डीबगर एक्सटेंशन ने इस ब्राउज़र को डीबग करना शुरू किया है' मैसेज है
Chrome के पता बार का स्क्रीनशॉट, जिस पर 'Debugger एक्सटेंशन ने इस ब्राउज़र को डीबग करना शुरू किया' मैसेज दिख रहा है

सैंडबॉक्स किए गए iframe

अगर आपको किसी स्ट्रिंग का आकलन कोड के तौर पर करना है और आप डीओएम एनवायरमेंट में हैं (जैसे, सामग्री स्क्रिप्ट, एक्सटेंशन सर्विस वर्कर के विपरीत), फिर कोई दूसरा विकल्प सैंडबॉक्स किए गए iframe का इस्तेमाल करना है. एक्सटेंशन के साथ ये चीज़ें काम नहीं करतीं सुरक्षा के लिहाज़ से, डिफ़ॉल्ट रूप से eval(). नुकसान पहुंचाने वाले कोड से, उपयोगकर्ता की सुरक्षा को खतरा हो सकता है और सिक्योरिटी को खतरा हो सकता है. हालांकि, जब कोड को सिर्फ़ किसी सुरक्षित जैसे, कोई iframe, जिसे बाकी वेब से सैंडबॉक्स किया गया हो, तो ये जोखिम काफ़ी कम हो जाते हैं. इसके तहत, कॉन्टेंट की सुरक्षा eval के इस्तेमाल को रोकने वाली नीति को हटाया जा सकता है. इससे आपको किसी भी मान्य JavaScript कोड.

अगर आपने इस्तेमाल का कोई ऐसा उदाहरण दिया है जिसके बारे में आपको ज़्यादा जानकारी नहीं है, तो हमारी टीम से संपर्क करें Chromium-एक्सटेंशन ईमेल पतों की सूची का इस्तेमाल करके सुझाव पा सकते हैं या वन स्टॉप सहायता से सलाह का अनुरोध करने के लिए टिकट

अगर आप किसी नतीजे से सहमत नहीं हैं, तो क्या करें

नीतियों को लागू करने में मुश्किल हो सकती है और समीक्षा में मैन्युअल इनपुट शामिल होता है. इसका मतलब है कि कभी-कभी Chrome वेब स्टोर टीम समीक्षा के निर्णय को बदलने के लिए सहमत हो सकती है. अगर आपने आपको लगता है कि आपके फ़ैसले की समीक्षा की गई है, तो आपके पास अपील अस्वीकार करने के फ़ैसले के ख़िलाफ़ अपील करने का विकल्प है वन स्टॉप सहायता सुविधा का इस्तेमाल करके