2013-03-05 7 views
13

में ऑपरेशन असुरक्षित है "मैं Greasemonkey का उपयोग कर रहा हूं और किसी विशिष्ट डोमेन में नियम जोड़ने का प्रयास कर रहा हूं। लेकिन इसके परिणामस्वरूप The operation is insecure कहने में त्रुटि हुई।
कोड क्रोम पर ठीक काम करता है।एक सीएसएस स्टाइलशीट में नियम जोड़ने का प्रयास फ़ायरफ़ॉक्स

स्क्रिप्ट http://mydomain.com/test/test.php
पर चलता है और सीएसएस फ़ाइल http://cdn.mydomain.com/test/css/global.css

मेरे समारोह है:

function css(selector, property, value) { 
    for (var i=0; i<document.styleSheets.length;i++) 
    { 
     try 
     { 
      document.styleSheets[i].insertRule(selector+ ' {'+property+':'+value+'}', document.styleSheets[i].cssRules.length); 
     } 
     catch(err) 
     { 
      try // IE 
      { 
       document.styleSheets[i].addRule(selector, property+':'+value); 
      } 
      catch(err) {} 
     } 
    } 
} 

गूगल पर मैंने पाया क्योंकि मैं पार डोमेन का उपयोग करने की कोशिश कर रहा हूँ यह हो सकता है कि, तो मैंने सीएसएस फ़ाइल में यूआरएल को 'स्वीकृत यूआरएल' में जोड़ने का प्रयास किया है लेकिन कोई परिणाम नहीं है।

मैं इसे कैसे ठीक करूं?

+0

स्टाइलिश क्रोम विस्तार करता है कुछ डोमेन के लिए शैलियों जोड़ने पर एक महान काम: https://chrome.google.com/webstore/detail/stylish/fjnbnpbmkenffdnngjfgmeleoegfcffe?एचएल = एन –

+0

यह क्रोम के लिए काम करता है, यह फ़ायरफ़ॉक्स के लिए नहीं है। – MetaDebugger

+0

[फ़ायरफ़ॉक्स के लिए स्टाइलिश] (https://addons.mozilla.org/en-US/firefox/addon/stylish/) क्रोम संस्करण से भी बेहतर काम करता है। (क्रोम में iframes के साथ समस्याएं हैं, उदाहरण के लिए।) –

उत्तर

4

हां, फ़ायरफ़ॉक्स क्रॉस-डोमेन वाले स्टाइलशीट तक पहुंच को अवरुद्ध करता है।

कोड "प्रतिबंधित यूआरआई पर पहुंच अस्वीकृत": "1012"
nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)"
स्थान: ... यह अपवाद फेंक (या कम से कम करने के लिए इस्तेमाल) कर सकते हैं। ..


लेकिन, सीएसएस के साथ, आप एक विशिष्ट शैली पत्रक में नियम जोड़ने की जरूरत नहीं है। बस जिस शैली की आप परवाह करते हैं उसे ओवरराइट करें।

उदाहरण के लिए, पेज सेट करता है, तो:

body { 
    background: white; 
} 

और अपनी स्क्रिप्ट सेट:

body { 
    background: red; 
}  

तो पेज (नाममात्र) लाल हो जाएगा।

लक्ष्य पृष्ठ शैलियों को बदलने के सबसे आसान, सबसे अच्छे तरीके के लिए, this one जैसे पिछले उत्तरों देखें।

2

स्टाइलशीट से नियम विभिन्न स्टाइलशीट की अनुमतियों के साथ चलते हैं। जिसका अर्थ यह है कि यदि आप एक क्रॉस-साइट स्टाइलशीट में नियम इंजेक्ट कर सकते हैं तो आप कुछ क्रॉस-साइट हमले कर सकते हैं। यही कारण है कि फ़ायरफ़ॉक्स एक क्रॉस-साइट स्टाइलशीट में नियम जोड़ना बंद कर देता है।

यह संभव है कि क्रोम इसके बजाय लिंकिंग दस्तावेज़ की अनुमतियों के साथ सभी नियम चलाता है, यही कारण है कि यह आपको चीजों को शीट में जोड़ने की अनुमति देता है .... हालांकि ध्यान दें कि क्रोम आपको पढ़ने नहीं देगा एक क्रॉस साइट स्टाइलशीट।

ध्यान दें कि अगर आप (<link> पर "crossorigin" विशेषता स्थापित करने और सुनिश्चित करें कि आपके CDN सही हेडर में सेवारत है बनाकर) CORS के साथ अपने स्टाइलशीट लोड तो आप इसे करने के लिए क्रॉस साइट पहुँच प्राप्त करने में सक्षम हो जाएगा।

+0

यह एक Greasemonkey एप्लिकेशन है, ओपी लक्ष्य पृष्ठ को नियंत्रित नहीं करता है, न ही उसके पास सीडीएन तक पहुंच है। –

+0

हम्म। क्या greasemonkey विस्तारित विशेषाधिकारों के साथ अपनी स्क्रिप्ट नहीं चलाता है? –

+0

हां Greasemonkey * थोड़ा बढ़ाया विशेषाधिकारों के साथ चला सकते हैं ('@ अनुदान 'राज्य के आधार पर), लेकिन यह सर्वर की ओर से कुछ भी प्रभावित नहीं कर सकता है। न ही यह कभी भी कॉरस या गाय को बाईपास करता है, सिवाय इसके कि 'GM_xmlhttpRequest()' क्रॉस-डोमेन अनुरोध कर सकता है। –

4

मैंने पाया इस समाधान समस्या के काम करता है:

var style = document.createElement("style"); 
document.head.appendChild(style); 
style.sheet.insertRule("body { font-size:40px; }", 0); 
+0

यह इस मुद्दे के आसपास काम नहीं करता है। –

संबंधित मुद्दे