कोई एक्सटेंशन वेबसाइटों और ज़्यादातर Chrome API को ऐक्सेस कर सकता है या नहीं, यह तय की गई अनुमतियों से तय होता है. अनुमतियां सिर्फ़ उन चीज़ों तक सीमित होनी चाहिए जो उसकी सुविधाओं के काम करने के लिए ज़रूरी हैं. अनुमतियों को सीमित करने से एक्सटेंशन की क्षमताएं तय होती हैं. साथ ही, अगर किसी हमलावर ने एक्सटेंशन के साथ छेड़छाड़ की है, तो डेटा का संभावित नुकसान कम हो जाता है. आसान, कम से कम, और वैकल्पिक अनुमतियां लागू करके, एक्सटेंशन और उनके उपयोगकर्ताओं को सुरक्षित रखें.
अनुमतियां व्यवस्थित करें
अनुमतियां वे जानी-पहचानी स्ट्रिंग होती हैं जो एक या एक से ज़्यादा होस्ट को ऐक्सेस देने वाले मिलते-जुलते पैटर्न या Chrome API की जानकारी देती हैं. इन्हें मेनिफ़ेस्ट में शामिल किया जाता है और इन्हें ज़रूरी अनुमतियों या वैकल्पिक अनुमतियों के तौर पर बताया जाता है.
{
"name": "Permissions Extension",
...
// required permissions
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
// optional permissions
"optional_permissions": [
"topSites",
"http://www.developer.chrome.com/*"
],
...
"manifest_version": 2
}
ज़रूरी अनुमतियों को सिर्फ़ उन चीज़ों तक सीमित करें जो एक्सटेंशन के मुख्य फ़ंक्शन के लिए ज़रूरी हैं. किसी एक्सटेंशन को उसकी ज़रूरत से ज़्यादा अनुमतियों का अनुरोध नहीं करना चाहिए. ऐसी अनुमतियों के लिए अनुरोध करके भविष्य में सबूत न दें जो अपडेट के साथ ज़रूरी हो सकती हैं.
वैकल्पिक सुविधाओं के लिए ज़रूरी अनुमतियों को, वैकल्पिक अनुमतियां के तौर पर रजिस्टर किया जाना चाहिए. इससे उपयोगकर्ता यह तय कर सकते हैं कि वे एक्सटेंशन के लिए कितना ऐक्सेस देना चाहते हैं और उन्हें कौनसी सुविधाएं चाहिए.
ज़रूरी अनुमतियां बताएं
किसी सामान्य एक्सटेंशन को कई अनुमतियों के लिए अनुरोध करने की ज़रूरत हो सकती है. साथ ही, कई अनुमतियों को इंस्टॉल करने पर चेतावनियां दिखती हैं. उपयोगकर्ता ऐसे एक्सटेंशन पर ज़्यादा भरोसा करते हैं जिसके बारे में सीमित तौर पर चेतावनी दी जाती है या जब उन्हें अनुमतियों के बारे में बताया जाता है.
किसी एक्सटेंशन के मुख्य फ़ंक्शन की पहचान करें और जानें कि उसके लिए किन अनुमतियों की ज़रूरत है. अगर सुविधाओं के लिए चेतावनियों वाली अनुमति की ज़रूरत हो, तो उन्हें वैकल्पिक बनाने के बारे में सोचें.
इवेंट के साथ वैकल्पिक अनुमतियां ट्रिगर करें
वैकल्पिक अनुमतियां सैंपल एक्सटेंशन के मुख्य फ़ंक्शन, नए टैब पेज को बदल रहे हैं. एक सुविधा यह दिखाती है कि उपयोगकर्ता का आज का लक्ष्य क्या है. इस सुविधा के लिए सिर्फ़ स्टोरेज अनुमति की ज़रूरत होती है, जिसमें चेतावनी शामिल नहीं होती.
एक्सटेंशन में एक और सुविधा भी है जो उपयोगकर्ता की सबसे लोकप्रिय साइटों को दिखाती है. इस सुविधा के लिए, topSites की अनुमति चाहिए, जिसके लिए एक चेतावनी मिली है.
ऐसी सुविधाएं डेवलप करना जो वैकल्पिक के तौर पर चेतावनियों के साथ अनुमतियों पर निर्भर करती हैं. साथ ही, उन सुविधाओं को ऑर्गैनिक तरीके से उपलब्ध कराने से, उपयोगकर्ताओं को एक्सटेंशन के बारे में बिना किसी जोखिम के जानकारी मिलती है. इसके अलावा, यह उपयोगकर्ताओं को एक्सटेंशन के साथ अपने अनुभव को और ज़्यादा पसंद के मुताबिक बनाने में मदद करता है और चेतावनियों को समझाने का मौका देता है.
ActiveTab अनुमति को बदलना
activeTab
अनुमति, उपयोगकर्ता को कुछ समय के लिए उस साइट का ऐक्सेस देती है जिसका इस्तेमाल वह करता है. साथ ही, एक्सटेंशन को मौजूदा टैब पर, "tabs"
अनुमति का इस्तेमाल करने की अनुमति देता है. यह कई मामलों में, "<all_urls>"
की ज़रूरत को बदल देता है और इंस्टॉल करने पर कोई चेतावनी नहीं दिखाता है.
ActiveTab के बिना:
ActiveTab के साथ:
जब उपयोगकर्ता, एक्सटेंशन को शुरू करता है, तो activeTab
अनुमति से, एक्सटेंशन को कुछ समय के लिए मौजूदा टैब का ऐक्सेस मिलता है. अगर एक्सटेंशन के साथ छेड़छाड़ की गई है, तो हमलावर को ऐक्सेस पाने से पहले उपयोगकर्ता के एक्सटेंशन को शुरू करने तक इंतज़ार करना होगा. वह ऐक्सेस सिर्फ़ तब तक चलेगा, जब तक कि टैब को नेविगेट या बंद नहीं कर दिया जाता.
किसी टैब के लिए activeTab
की अनुमति चालू होने पर, एक्सटेंशन ये काम कर सकता है:
- उस टैब पर
tabs.executeScript
याtabs.insertCSS
को कॉल करें. - उस टैब के लिए, ऐसे एपीआई की मदद से यूआरएल, टाइटल, और फ़ेविकॉन पाएं जो
tabs.Tab
ऑब्जेक्ट दिखाता है. - webRequest एपीआई का इस्तेमाल करके, टैब के मुख्य फ़्रेम ऑरिजिन पर नेटवर्क अनुरोधों को रोकें. एक्सटेंशन को कुछ समय के लिए, टैब के मुख्य फ़्रेम के ऑरिजिन के लिए, होस्ट की अनुमतियां मिलती हैं.
उपयोगकर्ता के लिए, हाथ के इन जेस्चर का इस्तेमाल करके, activeTab
की सुविधा चालू की जा सकती है:
- ब्राउज़र की कार्रवाई करना
- पेज पर कार्रवाई करना
- कॉन्टेक्स्ट मेन्यू आइटम चलाना
- commands API से कीबोर्ड शॉर्टकट एक्ज़ीक्यूट करना
- खोज वाली पट्टी एपीआई से किसी सुझाव को स्वीकार करना
ऐक्सेस दिया जा रहा है
अगर किसी एक्सटेंशन को file://
के यूआरएल ऐक्सेस करने हों या गुप्त मोड में काम करना हो, तो उपयोगकर्ताओं को chrome://extensions पर जाकर, एक्सटेंशन की ज़्यादा जानकारी वाले पेज में जाकर उन सुविधाओं का ऐक्सेस चालू करना होगा.
कोई एक्सटेंशन यह पता लगा सकता है कि क्या वह गुप्त मोड में चालू है. इसके लिए,
extension.isAllowedIncognitoAccess()
को कॉल करें या
extension.isAllowedFileSchemeAccess()
की मदद से file://
यूआरएल पर चलाएं.
अनुमतियों को समझना
एपीआई ने एक्सटेंशन के उपयोगकर्ताओं को जो सुविधाएं दी हैं उनके बारे में जानकारी देने के लिए अनुमति से जुड़ी चेतावनियां दी जाती हैं. हालांकि, हो सकता है कि इनमें से कुछ चेतावनियां शुरुआत में साफ़ तौर पर न दिखें. उदाहरण के लिए, "tabs"
अनुमति जोड़ने से, यह चेतावनी मिलती है कि यह जानकारी किसी और तरह की है: एक्सटेंशन, आपकी ब्राउज़िंग गतिविधि को पढ़ सकता है. हालांकि, chrome.tabs
API का इस्तेमाल सिर्फ़ नए टैब खोलने के लिए किया जा सकता है, लेकिन इसका इस्तेमाल tabs.Tab ऑब्जेक्ट का इस्तेमाल करके, हर नए टैब से जुड़े यूआरएल को देखने के लिए भी किया जा सकता है.
जब भी मुमकिन हो, तब चेतावनी देने वाली चेतावनियों से बचने के लिए, वैकल्पिक अनुमतियां या कम ताकतवर एपीआई लागू करें.
चेतावनियां देखना
अगर किसी एक्सटेंशन को अनपैक की गई फ़ाइल के तौर पर लोड किया गया है, तो अनुमति से जुड़ी कोई चेतावनी नहीं दिखेगी. किसी एक्सटेंशन की अनुमति से जुड़ी चेतावनियां देखने के लिए, chrome://extensions
पर जाएं. पक्का करें कि डेवलपर मोड चालू हो. इसके बाद, एक्सटेंशन पैक करें पर क्लिक करें.
एक्सटेंशन रूट डायरेक्ट्री फ़ील्ड में एक्सटेंशन के फ़ोल्डर का पाथ बताएं. इसके बाद, एक्सटेंशन पैक करें बटन पर क्लिक करें. पहली बार इस्तेमाल किए जाने वाले पैकेज के लिए, निजी पासकोड फ़ील्ड को अनदेखा करें.
Chrome दो फ़ाइलें बनाएगा, .crx
और .pem
फ़ाइल, जिसमें एक्सटेंशन की निजी कुंजी होगी.
निजी पासकोड न खोएं! .pem
फ़ाइल को गोपनीय और सुरक्षित जगह पर रखें. इसे
एक्सटेंशन को अपडेट करना होगा.
.crx
फ़ाइल को Chrome एक्सटेंशन के मैनेजमेंट पेज पर छोड़कर, उसे इंस्टॉल करें.
.crx
फ़ाइल को हटाने के बाद, ब्राउज़र पूछेगा कि क्या एक्सटेंशन जोड़ा जा सकता है और चेतावनियां दिखाई जा सकती हैं या नहीं.
चेतावनियों वाली अनुमतियां
ध्यान दें: अनुमति की टेबल को तेज़ी से अपडेट किया जाता है. इसलिए, हो सकता है कि मौजूदा चेतावनियों में दी गई जानकारी में कुछ अंतर हो. इसके अलावा, हो सकता है कि कुछ अनुमतियों को दूसरी अनुमतियों के साथ जोड़े जाने पर चेतावनियां न दिखें. उदाहरण के लिए, अगर एक्सटेंशन "<all_urls>"
का अनुरोध भी करता है, तो "tabs"
चेतावनी नहीं दिखेगी. एक्सटेंशन अनुमतियों के लिए दिखाई गई सबसे हाल की चेतावनियों की पुष्टि करने के लिए, चेतावनियां देखना में दिया गया तरीका अपनाएं.
अनुमति | ब्यौरा | चेतावनी |
---|---|---|
|
सभी होस्ट को एक्सटेंशन का ऐक्सेस देता है. activeTab अनुमति का इस्तेमाल करके, किसी भी होस्ट अनुमति का एलान करने से बचा जा सकता है. | आपकी विज़िट की जाने वाली वेबसाइटों पर मौजूद आपका डेटा देखना और उसमें बदलाव करना |
"https://HostName.com/" |
"https://HostName.com/" को एक्सटेंशन ऐक्सेस देता है. activeTab अनुमति का इस्तेमाल करके, किसी भी होस्ट अनुमति का एलान करने से बचा जा सकता है. |
HostName.com पर मौजूद अपना डेटा देखना और उसमें बदलाव करना |
"bookmarks" |
आपके एक्सटेंशन को chrome.bookmarks API का ऐक्सेस देता है. | अपने बुकमार्क पढ़ना और उनमें बदलाव करना |
"clipboardRead" |
अगर एक्सटेंशन document.execCommand('paste') का इस्तेमाल करता है, तो इसे भरना ज़रूरी है. |
कॉपी करके चिपकाए जाने वाले डेटा को पढ़ना |
"clipboardWrite" |
यह बताता है कि एक्सटेंशन document.execCommand('copy') या
document.execCommand('cut') का इस्तेमाल करता है. |
कॉपी करके चिपकाए जाने वाले डेटा में बदलाव करना |
"contentSettings" |
आपके एक्सटेंशन को chrome.contentSettings API का ऐक्सेस देता है. | कुकी, JavaScript, प्लगिन, जगह की जानकारी, माइक्रोफ़ोन, कैमरा वगैरह जैसी सुविधाओं तक वेबसाइट का ऐक्सेस कंट्रोल करने वाली सेटिंग में बदलाव करें. |
"debugger" |
यह आपके एक्सटेंशन को chrome.debugger एपीआई का ऐक्सेस देता है. |
|
"declarativeNetRequest" |
यह आपके एक्सटेंशन को chrome.declarativeNetRequest एपीआई का ऐक्सेस देता है. | पेज का कॉन्टेंट ब्लॉक करना |
"desktopCapture" |
आपके एक्सटेंशन को chrome.desktopCapture API का ऐक्सेस देता है. | स्क्रीन पर कॉन्टेंट कैप्चर करना |
"downloads" |
आपके एक्सटेंशन को chrome.downloads API का ऐक्सेस देता है. | डाउनलोड मैनेज करना |
"geolocation" |
इससे एक्सटेंशन को उपयोगकर्ता से अनुमति के लिए अनुरोध किए बिना, HTML5 जियोलोकेशन एपीआई का इस्तेमाल करने की अनुमति मिलती है. | अपनी मौजूदा जगह का पता लगाएं |
"history" |
आपके एक्सटेंशन को chrome.history API का ऐक्सेस देता है. | अपना ब्राउज़िंग इतिहास पढ़ना और बदलना |
"management" |
एक्सटेंशन को chrome.management API का ऐक्सेस देता है. | अपने ऐप्लिकेशन, एक्सटेंशन, और थीम मैनेज करना |
"nativeMessaging" |
एक्सटेंशन को नेटिव मैसेजिंग एपीआई का ऐक्सेस देता है. | स्थानीय ऐप्लिकेशन के साथ मिलकर काम करते हुए बातचीत करना |
"notifications" |
आपके एक्सटेंशन को chrome.notifications एपीआई का ऐक्सेस देता है. | सूचनाएं दिखाएं |
"pageCapture" |
यह एक्सटेंशन को chrome.pageCapture API का ऐक्सेस देता है. | आपकी विज़िट की जाने वाली वेबसाइटों पर मौजूद आपका डेटा देखना और उसमें बदलाव करना |
"privacy" |
एक्सटेंशन को chrome.privacy एपीआई का ऐक्सेस देता है. | निजता से जुड़ी सेटिंग बदलना |
"proxy" |
यह एक्सटेंशन को chrome.proxy एपीआई का ऐक्सेस देता है. | आपकी विज़िट की जाने वाली वेबसाइटों पर मौजूद आपका डेटा देखना और उसमें बदलाव करना |
"system.storage" |
एक्सटेंशन को chrome.system.storage API का ऐक्सेस देता है. | स्टोरेज डिवाइसों की पहचान करना और उन्हें निकालना |
"tabCapture" |
एक्सटेंशन को chrome.tabCapture API का ऐक्सेस देता है. | आपकी विज़िट की जाने वाली वेबसाइटों पर मौजूद आपका डेटा देखना और उसमें बदलाव करना |
"tabs" |
यह एक्सटेंशन, Tab ऑब्जेक्ट के उन खास फ़ील्ड को ऐक्सेस कर सकता है जिन्हें अनुमति मिली है.
यह ऑब्जेक्ट, chrome.tabs और chrome.windows के साथ-साथ कई एपीआई में इस्तेमाल किया जाता है. कई मामलों में, इन एपीआई का इस्तेमाल करने के लिए, एक्सटेंशन को "tabs" की अनुमति के बारे में
एलान करने की ज़रूरत नहीं होगी. |
अपना ब्राउज़िंग इतिहास पढ़ना |
"topSites" |
एक्सटेंशन को chrome.topSites एपीआई का ऐक्सेस देता है. | सबसे ज़्यादा देखी गई वेबसाइटों की सूची पढ़ना |
"ttsEngine" |
chrome.ttsEngine API को एक्सटेंशन ऐक्सेस देता है. | संश्लेषित बोली का इस्तेमाल करके बोले गए सभी टेक्स्ट को पढ़ना |
"webNavigation" |
यह एक्सटेंशन को chrome.webNavigation API का ऐक्सेस देता है. | अपना ब्राउज़िंग इतिहास पढ़ना |
अनुमतियां अपडेट करें
किसी एक्सटेंशन को अतिरिक्त अनुमतियों के साथ अपडेट करने से वह अस्थायी रूप से बंद हो सकता है. किसी भी नई चेतावनी के लिए सहमति देने के बाद, उपयोगकर्ता को इसे फिर से चालू करना होगा.
अगर उपयोगकर्ता मैन्युअल रूप से किसी ऐसे एक्सटेंशन को अपडेट करता है जिसमें अब टैब अनुमति शामिल है, तो उसे मैनेजमेंट पेज पर एक चेतावनी मिलेगी.
अगर एक्सटेंशन अपने-आप अपडेट होता है, तो वह तब तक बंद रहेगा, जब तक उपयोगकर्ता नई अनुमतियों के लिए सहमति नहीं देता.
नई सुविधा को वैकल्पिक बनाकर और मेनिफ़ेस्ट में optional_permissions
के लिए अनुमति के नए अपडेट जोड़कर, इस समस्या से बचा जा सकता है.