2010-12-02 18 views
6

मैं पूरे पृष्ठ को फिर से लोड किए बिना एक फॉर्म को सत्यापित करना चाहता हूं। मैं फिलहाल जावास्क्रिप्ट का उपयोग कर रहा हूं, हालांकि यह बड़े पैमाने पर असुरक्षित है। इसे पाने के लिए, मैं फॉर्म को सत्यापित करने के लिए AJAX और एक PHP स्क्रिप्ट का उपयोग करना चाहता हूं। क्या किसी को किसी भी सुरक्षा जोखिम के बारे में पता है?सत्यापन से AJAX के सुरक्षा जोखिम?

मुझे यह भी लगता है कि AJAX विधि वेनिला जेएस से कहीं अधिक सुरक्षित है, लेकिन मैं गलत हो सकता हूं?

+1

जहां तक ​​मुझे पता है कि AJAX XMLHttpRequest का उपयोग कर रहा है, जो स्वयं जावास्क्रिप्ट ऑब्जेक्ट है, इसलिए यदि आप AJAX और जावास्क्रिप्ट को अलग करते हैं तो यह अजीब लगता है। लेकिन वैसे भी, AJAX ताज़ा किए बिना पोस्ट/जीईटी की तरह है, इसलिए जब तक आप अपना सत्यापन सर्वर-साइड ठीक से करते हैं, तो आपको ठीक होना चाहिए। और नहीं, अगर आप सुरक्षित रूप से कोड नहीं करते हैं तो कुछ भी सुरक्षित नहीं है। –

+0

धन्यवाद :-) यह PHP/AJAX का उपयोग करने के पीछे भी मेरा तर्क था - यह (उचित रूप से) रीयलटाइम है लेकिन PHP की सापेक्ष सुरक्षा है। – Bojangles

उत्तर

5

वे शुद्ध क्लाइंट साइड जावास्क्रिप्ट के साथ मान्य होने के जोखिम के समान हैं। केवल अंतर यह है कि आप प्रक्रिया के हिस्से के रूप में कुछ डेटा के लिए सर्वर से पूछ रहे हैं।

उपयोगकर्ता फॉर्मेट जमा करने के लिए जावास्क्रिप्ट को ओवरराइड कर सकता है इससे कोई फर्क नहीं पड़ता कि सत्यापन परिणाम क्या है।

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

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

ध्यान दें कि वास्तव में अजाक्स का उपयोग करके सबमिट किए गए डेटा को मान्य करना एक अलग मामला है - क्योंकि यह अंतिम सबमिट किया गया डेटा है। यह अजाक्स सत्यापन को अंतिम सबमिशन के अग्रदूत के रूप में कर रहा है जो डेटा पर कोई विश्वास नहीं जोड़ता है।

+0

इसके लिए धन्यवाद। मैं कहूंगा कि यह क्लाइंट साइड जेएस की तुलना में मामूली रूप से सुरक्षित है - एक दुर्भावनापूर्ण उपयोगकर्ता PHP कोड को अपनी मशीन पर जेएस कोड के रूप में आसानी से संशोधित नहीं कर सकता है, और जब तक मैं अपनी PHP स्क्रिप्ट में सभ्य सुरक्षा उपायों का उपयोग करता हूं, तब तक वे सक्षम नहीं हो सकते खराब पोस्ट डेटा के साथ इसे तोड़ दें। – Bojangles

+2

उपयोगकर्ता को PHP कोड को संशोधित करने की आवश्यकता नहीं है। उन्हें केवल जावास्क्रिप्ट को संशोधित करने की आवश्यकता है जो प्रतिक्रिया से संबंधित है। PHP कहते हैं, "यह अस्वीकार्य डेटा है!", उपयोगकर्ता जावास्क्रिप्ट को "तो क्या ?!" कहता है। उस मामले के लिए, उपयोगकर्ता केवल पहले स्थान पर अनुरोध भेजने को छोड़ सकता है। – Quentin

+0

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

1

आप AJAX में डेटा को सत्यापित कर सकते हैं और साथ ही आप इसे शुद्ध जावास्क्रिप्ट में भी कर सकते हैं, लेकिन को डेटा प्राप्त करने के बाद इसे अपनी स्क्रिप्ट में फिर से सत्यापित करना होगा। आपके फॉर्म लक्ष्य पर POST अनुरोध भेजकर प्रत्येक क्लाइंट-साइड सत्यापन विधि से बचा जा सकता है।

2

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

प्रमाणीकरण को सर्वर पक्ष नहीं किया जाना चाहिए जबतक कि आप डीबी सामग्री (यानी उपयोगकर्ता नाम की विशिष्टता आदि) को मान्य नहीं कर रहे हैं। यदि आप बस यह सत्यापित कर रहे हैं कि कुछ ईमेल है या नहीं, तो आप इसे जेएस में कर सकते हैं, उदाहरण के लिए RegEx के साथ।

आप डीबी डेटा मान्य रहे हैं, तो सुनिश्चित करें कि सभी डीबी चर जो भेजा (पोस्ट/जीईटी) चर से ही शुरू mysql_real_escape_string का उपयोग कर एसक्यूएल इंजेक्शन

+2

MySQL के अलावा डेटाबेस हैं, और parametrized प्रश्नों का उपयोग आम तौर पर अधिक सुरुचिपूर्ण कोड में होता है जो गलती से बचने के लिए कठिन होता है। – Quentin

+0

बिल्कुल सही- और बहुत मान्य +1 – SW4

0

मुख्य यहाँ ध्यान में रखना बात को रोकने के लिए है कि जब है भाग निकले रहे प्रश्नों बनाने AJAX का उपयोग करके आप अनिवार्य रूप से अपने डेटाबेस में एक इंटरफ़ेस प्रदान कर रहे हैं। उदाहरण के लिए, यदि आप डुप्लिकेट उपयोगकर्ता नाम (जो आप जावास्क्रिप्ट में नहीं कर सकते हैं) या डुप्लिकेट ईमेल की जांच कर रहे हैं, तो एक संदेश प्रदान करने के लिए जैसे कि "यह उपयोगकर्ता नाम पहले से उपयोग में है ... कृपया एक और प्रयास करें", आप एक इंटरफेस प्रदान कर रहे हैं एक संभावित हैकर के लिए तत्काल जांचें कि कौन से उपयोगकर्ता नाम और/या ईमेल उपलब्ध हैं। सुरक्षा विचार जावास्क्रिप्ट के समान नहीं हैं। इस विषय पर आपको मेरी सलाह है (1) डेटाबेस तक पहुंचने के लिए पैरामीटरयुक्त प्रश्नों का उपयोग करें क्योंकि किसी ने पहले से ही सुझाव दिया है। (2) AJAX .php पृष्ठ पर देरी लागू करें - लंबाई परिदृश्य पर निर्भर करती है - मैं लगभग 1 सेकंड (3) धुंध पर AJAX निष्पादित करता हूं, या फोकस खोने पर, प्रत्येक कीप्रेस पर नहीं, (4) चेक लागू करें आपके AJAX हैंडलर में यह सुनिश्चित करता है कि अनुरोध अपेक्षित पृष्ठ से आता है (यानी: हैकर ने कुछ यादृच्छिक स्क्रिप्ट नहीं लिखी)। (5) केवल AJAX कॉल करें जब फॉर्म तत्व का कुछ अन्य मूल सत्यापन हुआ है [यानी: मूल जावास्क्रिप्ट सत्यापन]

मुझे उम्मीद है कि इससे मदद मिलती है। AJAX का उपयोग कर फ़ॉर्म सत्यापन बिल्कुल जावास्क्रिप्ट सत्यापन के समान दूरस्थ रूप से कुछ भी नहीं है। यह आपके डेटाबेस में एक इंटरफ़ेस है, और आपको इसके साथ सावधान रहना होगा।

यह कल्पना करने में सहायता करता है कि आप अपनी साइट पर कैसे हैक करेंगे - यह जानकर कि आपकी साइट के साथ कौन से ईमेल पते पंजीकृत हैं, शुरू करने के लिए एक शानदार जगह है। इसलिए मैं सामान्य शब्दों और/या नामों का उपयोग करके यादृच्छिक ईमेल पतों को उत्पन्न करने के लिए एक स्क्रिप्ट लिख सकता हूं और अपनी साइट पर पंजीकृत ईमेल पते की एक सूची प्राप्त करने के लिए अपने AJAX हैंडलर को हथौड़ा कर सकता हूं। मैं इसे जल्दी से कर सकता हूं अगर आपने सलाह (1) - (5) का पालन नहीं किया है तो मैंने ऊपर बताया है। एक बार मेरे पास ईमेल होने के बाद, मैं बस उन्हें Google ... संभावना है कि मुझे एक नाम देता है। मैं वहां से उपयोगकर्ता नाम अनुमान लगा सकता हूं। तो अब मेरे पास उपयोगकर्ता नाम और ईमेल हैं। पासवर्ड को समझाने में बहुत लंबा समय लगेगा, लेकिन अगर मैं आसानी से उपयोगकर्ता नाम या ईमेल प्राप्त कर सकता हूं ... यह आपको लक्ष्य के रूप में चिह्नित करता है और आपको अधिक ध्यान मिलेगा जो आप वास्तव में चाहते हैं।

मैं फिलहाल एक पंजीकरण सत्यापन प्रणाली पर काम कर रहा हूं - आईडी अगर आप चाहें तो इसे साझा करने में प्रसन्न रहें। शायद मैं कुछ महत्वपूर्ण याद कर रहा हूँ!

शांति बाहर।

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