2011-09-19 12 views
8

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

क्या यह संभव है? या, क्या वेब ब्राउज़र में एक अलग सुविधा है जो इन प्रकार के हमलों को होने से रोकती है?

+0

दुर्भावनापूर्ण जावास्क्रिप्ट पहले स्थान पर कैसे होगा? क्या भुगतान फ़ॉर्म उपयोगकर्ता सबमिट की गई सामग्री को प्रदर्शित करने की अनुमति देता है (एक्सएसएस)? यह एक असामान्य भुगतान फॉर्म होगा। –

उत्तर

5

का दौरा पड़ने से इस तरह संभव है पर विश्वास है, लेकिन इस के खिलाफ रोकने के लिए गलत तरीका है। यदि कोई हैकर फॉर्म के विवरण को बदल सकता है, तो वे फ़ॉर्म को सबमिट किए बिना AJAX GET के माध्यम से आसानी से गुप्त डेटा भेज सकते हैं। एक्सएसएस हमले को रोकने का सही तरीका यह सुनिश्चित करना है कि पृष्ठ पर सभी अविश्वसनीय सामग्री को एन्कोड करना सुनिश्चित करें कि हैकर में अपनी खुद की जावास्क्रिप्ट को पहले स्थान पर निष्पादित करने की क्षमता नहीं है।


अधिक एन्कोडिंग पर ...

StackOverflow पर नमूना कोड एन्कोडिंग का एक बड़ा उदाहरण है। कल्पना करें कि यह कितना गड़बड़ होगा अगर हर बार जब कोई व्यक्ति जावास्क्रिप्ट कुछ उदाहरण पोस्ट करता है, तो वास्तव में ब्राउज़र में इसे निष्पादित किया जाता है। जैसे,

<script type="text/javascript">alert('foo');</script>

यह नहीं थे तथ्य यह है कि इतना ऊपर टुकड़ा इनकोडिंग के लिए, तो आप सिर्फ एक बॉक्स को देखा होगा। यह निश्चित रूप से एक निर्दोष लिपि है - मैं कुछ जावास्क्रिप्ट को कोड कर सकता था जो आपकी सत्र कुकी को अपहृत कर देते थे और इसे bad.com/hacked- सत्र में भेजते थे। सौभाग्य से, हालांकि, एसओ यह नहीं मानता कि हर कोई अच्छी तरह से इरादा रखता है, और वास्तव में सामग्री को एन्कोड करता है। आप स्रोत देखते करना हो तो उदाहरण के लिए, आपको लगता है कि इतना इनकोडिंग है मेरी पूरी तरह से वैध HTML और इस में जावास्क्रिप्ट देखना होगा:

&lt;script type="text/javascript"&gt;alert('foo');&lt;/script&gt;

तो, बजाय वास्तविक < और > पात्रों जहाँ मैं उन्हें इस्तेमाल किया embedding से, उन्हें उनके एचटीएमएल-एन्कोडेड समकक्षों (&lt; और &gt;) के साथ प्रतिस्थापित किया गया है, जिसका अर्थ है कि मेरा कोड अब स्क्रिप्ट टैग का प्रतिनिधित्व नहीं करता है।

वैसे भी, यह एन्कोडिंग के पीछे सामान्य विचार है। पर अधिक जानकारी के लिए आपको एन्कोडिंग होना चाहिए, जो कि आप सर्वर-साइड का उपयोग कर रहे हैं, इस पर निर्भर करता है, लेकिन अधिकांश वेब फ्रेमवर्क में कुछ प्रकार के "आउट ऑफ़ द बॉक्स" एचटीएमएल एन्कोडिंग यूटिलिटी शामिल हैं। आपकी ज़िम्मेदारी यह सुनिश्चित करना है कि उपयोगकर्ता द्वारा प्रदत्त (या अन्यथा अविश्वसनीय) सामग्री ALWAYS प्रस्तुत करने से पहले एन्कोड किया गया हो।

+1

'एन्कोड' से आपका क्या मतलब है? बहुत अच्छा लगता है लेकिन मुझे यकीन नहीं है कि इसमें कौन सी तकनीकें शामिल होंगी। –

+0

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

+0

@ मिचल - क्रॉस-मूल सर्वर पर डेटा भेजने में बहुत आसान है। आपको बस एक स्क्रिप्ट टैग डालना है जो किसी अन्य सर्वर पर स्क्रिप्ट src = xxx "को इंगित करता है और डेटा को स्क्रिप्ट टैग यूआरएल में क्वेरी पैरामीटर के रूप में रखता है। इस प्रकार जेएसओएनपी काम करता है, हालांकि JSONP को केवल भेजने के लिए जरूरी नहीं है किसी अन्य सर्वर के लिए डेटा। – jfriend00

1

वास्तव में इसे रोकने के लिए कुछ भी नहीं है।

एकमात्र चीज जो मैं करने का सुझाव दूंगा वह कुछ सर्वर पक्ष उपयोगकर्ता फ़ॉर्म से सर्वर पर आने वाली किसी भी जानकारी का सत्यापन है।

के रूप में कहावत है: कभी उपयोगकर्ता

+0

मुझे लगता है कि यह प्रश्न उपयोगकर्ता की सुरक्षा के बारे में अधिक है। –

+0

उपयोगकर्ता की सुरक्षा? किस्से? – Neal

+0

अपनी जानकारी को हमलावर साइट पर सबमिट करने से। –

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