मैं अपने ऐजैक्स फ़ंक्शंस को कॉल करने से पावर उपयोगकर्ता को कैसे रोक सकता हूं?


12

मेरे पास एक साइट है जो कई कार्यों को करने के लिए अजाक्स कॉल का उपयोग करती है। उनके पास एक स्क्रिप्ट - ajax.php पर वेबब्रोसर कॉल बैक है। यद्यपि मैं डेटा को प्रेषित करने के लिए पोस्ट डेटा का उपयोग करता हूं और कमांड को सीमित करता हूं जो कि अजाक्स स्क्रिप्ट को कॉल कर सकता है, साइट को हेरफेर करने के प्रयास के लिए एज़ैक्स कॉल को स्पूफ करने से उपयोगकर्ताओं को रोकने के लिए वास्तव में कुछ भी नहीं है। क्या उपयोगकर्ताओं को कॉल को ख़राब करने से रोकने के लिए कुछ कंबल तरीका है? क्या यह सुनिश्चित करने का एक तरीका है कि एक अजाक्स कॉल वास्तव में मेरी वेबसाइट से आता है और किसी अन्य स्क्रिप्ट या साइट से नहीं?

या क्या मुझे बस php स्क्रिप्ट में सीमा की स्थिति की जांच करनी है और उपयोगकर्ताओं को उन चीजों को स्पूफ करने से रोकना है जो उन्हें करने की अनुमति नहीं है, लेकिन उन्हें स्पूफ करने की अनुमति दें जहां उन्हें अनुमति दी जाएगी।


क्या अजाक्स कॉल पूरी तरह से अनधिकृत हैं? क्या आप प्रत्येक के लिए सत्र बनाते हैं? क्या गालियों के पैटर्न हैं? और क्या समस्या विशिष्ट जोड़तोड़ है या साइट पर लोड की मात्रा अधिक है?
आर्टलंग

क्या आप अधिक विवरण पोस्ट कर सकते हैं? AJAX कॉल क्या कर रहे हैं? वे क्या हेरफेर कर रहे हैं? AJAX के बाहर स्क्रिप्ट को कॉल करने पर क्या समस्याएं आती हैं?
असंतुष्टGoat

मैं वास्तव में एक विशिष्ट परिस्थिति के बारे में नहीं पूछ रहा हूं, बल्कि कई परिस्थितियों के लिए सामान्य समाधान के लिए कह रहा हूं। यदि कोई ऐसा समाधान है, जो ऐसा नहीं लगता है कि वहाँ है।
डैनियल बिंगहैम

जवाबों:


12

मुझे नहीं लगता कि ऐसा करने का कोई तरीका मज़बूती से है, क्योंकि आपके द्वारा भेजी जा सकने वाली कोई भी जानकारी उपयोगकर्ता के कितने चतुर होने पर निर्भर करती है।

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


2
+1 .. ठीक उसी तरह जैसे कि लोग अपने ब्राउज़र की किसी भी चीज़ की स्थानीय प्रतियों को सहेजने से रोकना असंभव है। यह देखने के लिए कि क्या आप उन्हें हार मान सकते हैं और इससे पहले कि वे इसका पता लगाते हैं, किसी और चीज़ पर चले जाएं।
टिम पोस्ट

6

संक्षेप में, नहीं। GET या POST के माध्यम से एक URL के लिए कोई भी अनुरोध किसी भी सॉफ्टवेयर का उपयोग करके किया जा सकता है। वास्तव में, AJAX का अनुरोध URL को सीधे लोड करने से वास्तव में अलग नहीं है, सिवाय बाद में लौटाए गए डेटा को वेब पेज की तरह ब्राउज़र में प्रदर्शित किया जाता है।

यही कारण है कि आपको सर्वर पर हमेशा प्रस्तुत डेटा को मान्य करना चाहिए, चाहे आप कोई भी जावास्क्रिप्ट सत्यापन करें या नहीं।

यह स्पष्ट नहीं है कि सर्वर-साइड स्क्रिप्ट क्या कर रहा है और क्या गलत हो सकता है, लेकिन यदि उपयोगकर्ता आपकी साइट को खराब डेटा के साथ कॉल करके "साइट में हेरफेर करने में सक्षम हैं" तो आप गलत कर रहे हैं।

संभवतः सबसे अच्छा समाधान प्रमाणीकरण के कुछ रूप को पेश करना होगा।


3

तो आप मूल रूप से केवल AJAX अनुरोधों का जवाब देने के लिए ajax.php को सीमित करना चाहते हैं?

मैं कोई php विशेषज्ञ नहीं हूँ, लेकिन यह निर्धारित करने के लिए संभव है कि क्या यह निर्धारित करना है कि AJAX या "नियमित" ब्राउज़र अनुरोध से मान आ रहा है या नहीं $_SERVER['HTTP_X_REQUESTED_WITH']

स्रोत


2
अच्छी बात यह है कि गाली देने वाले ने अजाक्स या फोर्ज का उपयोग नहीं किया है कि HTTP हेडर
एडम

1

जैसा कि किसी और ने बताया ... अजाक्स कॉल केवल $ _GET या $ _POST के रिसीवर हैं, इसलिए मेरा दृष्टिकोण हमेशा से ही उनके साथ व्यवहार करना है क्योंकि मैं किसी भी कार्रवाई पृष्ठ और इनपुट को फ़िल्टर / फ़िल्टर कर दूंगा। यदि आपके पास उदाहरण के लिए एक महीने की तरह की एक छोटी सी भिन्नता है, और आप जानते हैं कि यह हमेशा "जन, फरवरी, मार्च ..." प्रारूप में है, तो आप अपेक्षित मूल्यों की एक सरणी निर्धारित कर सकते हैं और इसके खिलाफ फ़िल्टर कर सकते हैं। जो कुछ भी मैच नहीं करता है उसे ट्रैप करें और वैकल्पिक रूप से "बज़्ट ... जैसे खेलने के लिए धन्यवाद ..."

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

HTH


"बज़ट" के लिए +1 - जो "बज़ट - प्लेइंग फॉर थैंक्स!" के संदर्भ में उतना ही मजेदार है। उपयोगकर्ता की मशीन पर कुकी सेट द्वारा लागू किए गए तीन घंटे के प्रतिबंध के साथ काले रंग की धीमी गति से फीका
पड़ने के बाद

0

मुझे लगता है कि आपके समाधान का एक प्रमुख हिस्सा एक विशिष्ट उपयोगकर्ता फिंगरप्रिंट से ट्रैफ़िक को सीमित करने की दर होगा । हो सकता है कि IP पते, उपयोगकर्ता एजेंट स्ट्रिंग और भेजे गए डेटा का हैश हो।

साथ ही, जो पेज ajax को लौटाए गए डेटा को ajax के करीब बुलाता है, उसकी मदद से मदद मिल सकती है। तो प्रश्न में पृष्ठ पर, पृष्ठ लोड पर एक सत्र कुंजी भेजें जो Xसत्रों के लिए अच्छा है , प्रत्येक ajax अनुरोध के लिए आपके जावास्क्रिप्ट को उस कुंजी को वापस पास करना होगा या ajax एक विफलता लौटाएगा। एक बार आपके पेज हिट X+1ajax कॉल, कुछ कार्रवाई (शायद कैप्चा? शायद यह भी एक तरह कुछ करने के लिए उपयोगकर्ता के लिए मजबूर mousemoveया tapपुनः आरंभ फिर एक नया सत्र कुंजी (मूल ajax से बैंड से बाहर) तार नीचे भेजने से पहले यूए के आधार पर घटना) प्रक्रिया।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.