2013-12-15 11 views
13

तो, यह मुद्दा है।जावास्क्रिप्ट पूरी तरह से "सुरक्षित छेड़छाड़" चर

// Dangerous __hostObject that makes requests bypassing 
// the same-origin policy exposed from other code. 
(function(){ 
    var danger = __hostObject; 
})(); 
delete __hostOBject; 

जानते हुए भी कोई स्क्रिप्ट छेड़छाड़ कर सकते हैं या उस तक पहुंच __hostObject मैं पूरी तरह से सुरक्षित हूं:

मैं की तरह कुछ है?

(वे कर सकते हैं, तो मैं एक CSRF vulnerability या बुरा है।)

नोट 1: यह एक ब्राउज़र एक्सटेंशन के लिए है। मेरे पास पेज पर चल रही अन्य स्क्रिप्ट की तुलना में बेहतर हुक है। मैं उनके सामने निष्पादित करता हूं और मुझे लोड होने से पहले भी किया जाता है।

नोट 2: मुझे पता है कि सामान्य रूप से स्क्रिप्ट के लिए यह कई बार पूछा गया है। मैं सोच रहा हूं कि यह संभव है अगर मुझे पता है कि से पहले किसी अन्य स्क्रिप्ट को लोड करता है।

+0

मैं एक [नमूना कोड] लिखा है (http://jsfiddle.net/35G8e/2/) जो अधिलेखित कर देता है 'Function.prototype पुन: लोड .call'। (अगर आप वास्तव में सोचते हैं कि मैं दुर्भावनापूर्ण देवताओं की मदद कर रहा हूं तो इस पोस्ट को ध्वजांकित करने के लिए स्वतंत्र महसूस करें। मेरी राय में, अंतिम हमलावर इन तकनीकों को वैसे भी जानते होंगे।) – ComFreek

+1

@ कॉमफ्रीक आप 'पुरानी कॉल' के परिणाम को वापस लौटाना भूल गए हैं। लेकिन वास्तव में, यह सामान्य सिद्धांत है जो बंदर-पैच (अंतर्निहित) जावास्क्रिप्ट विधियों के लिए उपयोग किया जाता है। –

उत्तर

5

प्रदान किया गया कि __hostObject हटाया जा सकता है, आपके प्रश्न का कोड सुरक्षित है।

हालांकि, मुझे लगता है कि आपका वास्तविक कोड थोड़ा अधिक जटिल है। उस स्थिति में, बहुत सावधानीपूर्वक कोडिंग की आवश्यकता होती है, क्योंकि पेज बंद होने के लिए अंतर्निहित विधियों (उदा। Function.prototype.call) को बदल सकता है और जो भी बुरी चीजें चाहते हैं उन्हें कर सकते हैं। जब मैंने ऐसा परीक्षण किया तो मैंने इस पद्धति के माध्यम से कांगो और क्रॉसराइडर जैसे विस्तार ढांचे की कार्यक्षमता का सफलतापूर्वक दुर्व्यवहार किया था।

+0

आज आप बहुत तेज हैं (या भाग्यशाली लेकिन मैं तेज सोचना चाहता हूं)। यह एक समस्या है जो हम अभी क्रॉसराइडर के साथ कर रहे हैं। अब मैं इंटरनेट एक्सप्लोरर के लिए बीएचओ का परीक्षण कर रहा हूं और मुझे जावास्क्रिप्ट को ऐसे अनुरोध करने की ज़रूरत है जो क्रॉस मूल नीति को बाईपास करें और/या रजिस्ट्री में क्रॉस साइट डेटा स्टोर करें। दोनों बहुत ही समस्याग्रस्त संचालन। मैं एक बेहतर तरीके से नहीं सोच सका। (साथ ही, यदि आप '.call' के साथ इस तरह के शोषण के लिए उदाहरण कोड जोड़ सकते हैं - जो वास्तव में सूख जाएगा)। क्या ऐप को मारने का कोई भरोसेमंद तरीका है यदि '.all' जैसी चीज़ छेड़छाड़ की गई थी? (बाद में विचार - वे इसे तब भी कर सकते हैं जब मैं भी लोड करता हूं)। –

+1

@ बेंजामिनग्रेनबाम कार्यक्षमता का दुरुपयोग करने के लिए कोड छोटा है, मैं दुर्भावनापूर्ण देवताओं को खिलाने से बचने के लिए नमूना कोड पोस्ट नहीं करूंगा। मैं सिर्फ आपके अन्य प्रश्न का उत्तर लिख रहा हूं, देखते रहें;) –

+0

मुझे खेद है दोस्तों। मैं समस्या और समाधान को समझने की कोशिश कर रहा हूं, लेकिन नहीं कर सका। क्या आप कृपया थोड़ा और समझा सकते हैं? – thefourtheye

0

बस एक ब्रेकपाइंट जोड़ने नहीं होगा और स्क्रिप्ट का पर्दाफाश अपने __hostObject

+0

समस्या वास्तविक उपयोगकर्ता नहीं है, यह अन्य स्क्रिप्ट्स है जो मैं नहीं कर सकता इसके साथ गड़बड़ विश्वास करो। जहां तक ​​मुझे पता है, एक और लिपि यह नहीं कर सकती है। –

+0

ठीक है, यह सच लगता है। –

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