2010-10-15 20 views
7

वर्तमान में मैंने एक ऐसी साइट विकसित की है जिसका उपयोग वित्तीय लेनदेन को संभालने के लिए किया जाता है। मैंने देखा है कि मेरे कुछ ग्राहकों ने जावास्क्रिप्ट इंजेक्शन हमले किए हैं और कुछ लेन-देन किए हैं जो संभव नहीं हैं। एक उदाहरण के रूप में मैंने ऑर्डर देने से पहले अपनी नकदी शेष राशि की जांच की है। लेकिन उनमें से कुछ ने पता बार में निम्नलिखित जावास्क्रिप्ट चलाकर बदल दिया। उन्होंने पृष्ठ स्रोत में देखकर विविध नाम लिया है।जावास्क्रिप्ट इंजेक्शन अटैक को कैसे रोकें

javascript:void(document.accounts.cashBalence.value="10000000") 

चूंकि यह महत्वपूर्ण है, मैं इसे जल्दी से ठीक करना चाहता हूं। तो जावास्क्रिप्ट इंजेक्शन हमलों को रोकने के लिए एक तरीका है?

+29

कृपया मुझे बताएं कि यह कौन सा बैंक है, इसलिए मैं कर सकता हूं .... er, see? [खांसी] –

+16

क्या आप असली हैं? जैसा कि आप वास्तव में जेएस के माध्यम से एक लाइव वित्तीय साइट पर खाता संतुलन में हेरफेर कर सकते हैं ?? Dude। बिल्कुल नहीं। मुझे आशा है कि आपका मज़ाक उड़ाएगा। – RPM1984

+0

क्या आपने इंटरपोलिक देखा है? http://www.recursion.com/interpolique.html – belwood

उत्तर

30

आप obfuscate या हैश परिवर्तनीय नाम और/या मानों को रोक सकते हैं। हालांकि,
जावास्क्रिप्ट का उपयोग न करें, इसके बजाय सर्वर-साइड में प्रत्येक तर्क करें।

+10

+ 10k कौन संभवतः सोच सकता है कि सर्वर पर चेक किए बिना क्लाइंट के कंप्यूटर पर महत्वपूर्ण व्यावसायिक तर्क छोड़ना एक अच्छा विचार है? – deceze

+0

एक के लिए अच्छी तरह से, बैंकिंग साइटों पर जावास्क्रिप्ट का उपयोग न करें। चिंता करने के लिए एक चीज़ कम हुई। "AJAX" अनुभव की आवश्यकता नहीं है। – RPM1984

+8

* जावास्क्रिप्ट का उपयोग करना ठीक है, लेकिन क्लाइंट ** पर केवल यूआई तर्क और सैनिटी जांच ** के लिए। सर्वर * कुछ भी विश्वास नहीं करना चाहिए *। –

7

जावास्क्रिप्ट उपयोगकर्ता के ब्राउज़र में चलता है। आप पर अंततः इसका कोई नियंत्रण नहीं है और इसे भरोसा नहीं करना चाहिए। ब्राउज़र में आप जो भी सत्यापन करते हैं वह केवल उपयोगकर्ता की सुविधा के लिए है, इसलिए उन्हें जितनी जल्दी हो सके समस्याओं से सतर्क किया जा सकता है।

ऑर्डर स्वीकार करने वाला बैकएंड कोड उपयोगकर्ता के संतुलन की आधिकारिक जांच करना चाहिए।

1

कोई क्लाइंट-साइड स्क्रिप्टिंग (जावास्क्रिप्ट समेत) सत्यापन के लिए अच्छा नहीं है, यह सब सर्वर-साइड पर किया जाना चाहिए।

यह विश्वास करने के लिए बहुत अविश्वसनीय है विशेष रूप से यदि यह वित्तीय रिकॉर्ड के लिए है !!

इसका उपयोग बेहतर "उपयोगकर्ता अनुभव" के लिए किया जाना चाहिए। लिखते समय फॉर्म सत्यापन या जो कुछ भी नहीं!

8

अंत में यह जावास्क्रिप्ट की समस्या भी नहीं है। आपका सर्वर HTTP का उपयोग कर बाहरी दुनिया से बात करता है। यह HTTP का उपयोग कर डेटा भेजता है और HTTP का उपयोग कर डेटा प्राप्त करता है। कोई भी HTTP का उपयोग कर डेटा से अनुरोध कर सकता है और कोई भी HTTP का उपयोग कर डेटा भेज सकता है।

इस बारे में फिर सोचें:
किसी बहुत ही सरल प्रोटोकॉल है कि HTTP के माध्यम से अपने सर्वर से डेटा भेज सकते हैं।

एचटीएमएल और जावास्क्रिप्ट जो आप लोगों के ब्राउज़र में भेज रहे हैं, वह एक अच्छी मदद है, एक इंटरफेस, ताकि उन्हें आसानी से आपके सर्वर पर डेटा भेज सकें। वे curl कमांड लाइन पर या telnet द्वारा पोर्ट 80 में आईएनजी का उपयोग कर ऐसा कर सकते हैं और वास्तव में निम्न स्तर पर बात कर सकते हैं।

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

-2

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

उपयोगकर्ता इनपुट प्रदर्शित करते समय, आपको एस्केप टेक्स्ट को प्रदर्शित करने के लिए इसे ब्राउजर द्वारा मूल्यांकन किया जाएगा और इसका मूल्यांकन नहीं किया जाना चाहिए।

अपने सर्वर का उपयोग करें, आपको अपने व्यापार तर्क को सर्वर पर रखना चाहिए, न कि क्लाइंट को जावास्क्रिप्ट का उपयोग करना चाहिए या नहीं। क्लाइंट को भेजे गए सभी आंकड़े सिर्फ किसी भी व्यावसायिक तर्क को संसाधित नहीं करते हैं और उन्हें संसाधित नहीं करना चाहिए।

+0

उन्होंने कहा कि लोगों ने एड्रेस बार में स्निपेट दर्ज करके जावास्क्रिप्ट में हेरफेर किया है (जावास्क्रिप्ट कंसोल का उपयोग करने के समान), आपकी युक्तियां वहां मदद नहीं करेंगी। – deceze

0

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

System.out.printin ("Welcome, Would you like to login to edit?") 

फिर {System.in = "Yes"}

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