2010-07-07 18 views
7

किसी को जावास्क्रिप्ट इंजेक्ट करने और चर या एक्सेस फ़ंक्शंस में हेरफेर करने के लिए रोकने के तरीके हैं, या इसे काफी कठिन बनाते हैं? एक विचार था कि मेरे पास प्रत्येक रीलोड पर यादृच्छिक रूप से सभी var नामों को बदलना है ताकि मैलवेयर स्क्रिप्ट को हर बार फिर से लिखना होगा? या क्या अन्य कम दर्दनाक तरीके हैं?जावास्क्रिप्ट कोड हैकिंग/इंजेक्शन/हेरफेर को मुश्किल बनाने के तरीके?

मैं समझता हूं कि आखिरकार कोई अपना रास्ता हैक कर देगा, लेकिन मैं कार्रवाई को पुन: पेश करने में मुश्किल बनाने के तरीकों को जानना चाहता हूं, ताकि लोग किसी बुकमार्लेट या किसी के उपयोग के लिए समान कुछ प्रकाशित न करें। मुझे कोई परवाह नहीं है कि विशेषज्ञों को कोड में अपना रास्ता मिल रहा है, लेकिन मैं इसे javascript:d=0;

से थोड़ा अधिक जटिल होना चाहता हूं यदि आप हैकिंग जावास्क्रिप्ट को थोड़ा और कठिन बनाना है, तो कृपया उन्हें लिखें।

+2

Obfuscation रास्ते का हिस्सा बन जाता है। – Artelius

+2

मुश्किल है? हाँ। काफी मुश्किल है? असली सुरक्षा के लिए कभी नहीं (लेकिन यह गेम या जो कुछ भी आसान धोखाधड़ी रोकने के लिए पर्याप्त हो सकता है)। –

+1

मुझे लगता है कि सवाल यह है कि "यह क्यों मायने रखता है?" यदि सर्वर पर भेजा गया राज्य है, तो जेएस एंड पर गार्ड पर भरोसा करना बुरा अभ्यास है, यदि कोई डेटा नहीं भेजा जाता है तो कौन खो देता है? – spender

उत्तर

14

आप अपने जेएस को स्वयं-निष्पादन समारोह में केवल निजी विधियों और चर का उपयोग करने के लिए लिख सकते हैं। उदाहरण के लिए, निम्न कोड किसी के लिए बंदर के लिए वैश्विक नामस्थान में स्वयं का कोई संकेत नहीं छोड़ता है।

(function(){ 
    var x = 1; 
    var y = 2; 
    var z = "A am z"; 
    var clickHandler = function() { 
     alert('You clicked the body'); 
    }; 
    document.getElementsByTagName('body')[0].addEventListener('click',clickHandler,true); 
}()); 

[संपादित करें] ऊपर कोड कोई उपयोगकर्ता किसी भी विश्व स्तर पर उपलब्ध वस्तुओं, तरीकों, घटनाओं या गुण का उपयोग कर रहे (इस मामले में, document, getElementsByTagName और addEventListener) को अधिलेखित करने के लिए अतिसंवेदनशील है, इसलिए यदि आप वास्तव में पागल हैं कि आप पेज लोड होने से पहले इन्हें अपने फ़ंक्शन स्कोप में कॉपी कर सकते हैं और उपयोगकर्ता को उन्हें ओवरराइट करने का मौका है। addEventListener का उपयोग करना एक अच्छा विचार है क्योंकि ईवेंट body.onclick के विपरीत, इसे फ़ंक्शन के बाहर से हटाया या ओवरराइट नहीं किया जा सकता है।

+0

का उत्तर देने के लिए – stagas

+2

आपको अंतिम पंक्ति में एक त्रुटि है जो यह होना चाहिए}}(); 'मुझे लगता है कि – stagas

+0

मैं इसे तब तक लिखता था जब तक क्रॉकफोर्ड मेरे सिर में नहीं आया। एक लापता अर्धविराम (जो मैं जोड़ूंगा) के अलावा, उपर्युक्त कोड JSLint के अनुसार मान्य करता है; – Andrew

24

स्वीकार करें कि आपकी जावास्क्रिप्ट "छेड़छाड़" की जाएगी और सर्वर की तरफ प्रावधान करेगी। लोगों के साथ झुकाव रोकने के लिए मूल रूप से कुछ भी नहीं है जो आप कर सकते हैं।

+0

धन्यवाद, मैं इसे कठिन बनाने के तरीके के बारे में सोच रहा था, हेरफेर को रोकने के लिए वास्तव में महत्वपूर्ण नहीं है, लेकिन मैं कम से कम किसी को बुकमार्कलेट पोस्ट करने से रोकने के लिए 'उस शांत चीज को' करने के लिए रोकना चाहता हूं ताकि हर कोई हैक कर सके। मुझे वास्तव में परवाह नहीं है कि एक विशेषज्ञ अंततः एक रास्ता खोजता है, लेकिन मैं इसे नोबस के लिए काफी कठिन बनाना चाहता हूं, और यदि संभव हो तो टूल का उपयोग किये बिना कार्रवाई को फिर से उत्पन्न करना मुश्किल हो सकता है। – stagas

+3

मैं @spender से सहमत हूं। आपके परिदृश्य में समस्या यह है कि आप जो भी कर सकते हैं वह अस्पष्टता के माध्यम से सुरक्षा है। यह आपको बहुत समय और प्रयास करेगा और समस्या को पूरी तरह से हल नहीं करेगा, इसलिए आपको हमेशा सर्वर की तरफ भी करना होगा। – flpmor

+0

मैं पर्याप्त सहमत नहीं हो सकता। अस्पष्टता के माध्यम से सुरक्षा एक बुरा विचार है। आपको सर्वर-साइड सत्यापन करने की आवश्यकता है। अवधि। वास्तविक प्रश्न –

-1

Obfuscation और minification को इसे हैक करना थोड़ा मुश्किल बनाना चाहिए, लेकिन मैं स्पेंडर से सहमत हूं।

0

कोई भी उपयोगकर्ता जो वास्तव में क्लाइंट के साथ छेड़छाड़ करना चाहता है, वह सक्षम होगा। कोड उसकी मशीन पर है। यहां तक ​​कि यदि आप क्लाइंट साइड कोड को खराब करते हैं, तो उनके उपकरण भी हैं जो किसी को कोड को दूसरे में वापस करने में मदद करेंगे।

हालांकि साइट पर साइट को सुरक्षित बनाने के बारे में आपको क्या सोचने की आवश्यकता है, और अन्य उपयोगकर्ताओं के लिए भी सुरक्षित है। यह (कम से कम के रूप में) का अर्थ है:

  1. चेकिंग/सर्वर पर प्रत्येक अनुरोध और इनपुट पैरामीटर मान्य कर रहा है तो उपयोगकर्ता को ट्रिगर द्वारा किसी भी सर्वर साइड डेटा को बदलने के लिए नहीं कर सकेंगे 'काट दिया' ग्राहक के पक्ष कार्यों आप ने लिखा ।

  2. उपयोगकर्ता इनपुट से उत्पन्न होने वाली स्क्रीन पर आपके द्वारा उत्पादित सभी डेटा की जांच करें। अन्य उपयोगकर्ताओं ने क्लाइंट साइड स्क्रिप्ट डाली हों जो आपकी साइट के लिए खतरनाक हैं, और विशेष रूप से आपकी साइट पर अन्य उपयोगकर्ताओं के लिए खतरनाक हैं। (यदि आप .NET का उपयोग कर रहे हैं तो एंटीएक्सएसएस लाइब्रेरी देखें)

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