दिलचस्प पोस्ट
कोणीय 2 घटक @ इनपुट नहीं चल रहा है .net UrlEncode – लोअरकेस समस्या SqlDataReader से डेटा पढ़ें NSArray को उद्देश्य-सी में एक नए NSArray में फ़िल्टर करना जेपीपीएल को ज़ेबरा प्रिंटर भेजने के लिए एनएटीटी कोड जावा में फ्लोट्स या डबल्स के साथ फ्लोटिंग प्वाइंट सटीक त्रुटियों से कैसे बचें? उच्छृंखल: नामांकित शाखाएं एकाधिक रिपॉजिटरी बनाम आप प्रदर्शन परीक्षण जावास्क्रिप्ट कोड कैसे करते हैं? प्रोटोटाइप कन्स्ट्रक्टर सेट करना आवश्यक क्यों है? मैं PHP में एक वेब पेज का HTML कोड कैसे प्राप्त करूं? किसी एकल आकृति में विभिन्न भूखंडों के लिए अलग-अलग रंग की रेखाएं कैसे प्राप्त करें? यह Google Play APK क्या त्रुटि संदेश का अर्थ प्रकाशित करता है? कहां है | डाटाडाइरेक्टरी | परिभाषित? सी ++ 11 में पदावनत फेंक सूची डिफ़ॉल्ट रूप से सबमिट किए गए HTML फ़ॉर्म पर बटन कैसे सबमिट करें?

मैं JSON पहुंच को कैसे प्रतिबंधित कर सकता हूं?

मेरे पास एक वेब अनुप्रयोग है जो मेरे नए बनाए गए JSON API से डेटा खींचता है।

मेरा स्थिर HTML पृष्ठ गतिशील रूप से स्थिर HTML पृष्ठ से JavaScript के माध्यम से JSON API को कॉल करता है।

मैं अपने JSON API तक पहुंच को कैसे प्रतिबंधित कर सकता हूं ताकि केवल मैं (मेरी वेबसाइट) इसे कॉल कर सकूं?

यदि यह मदद करता है, तो मेरी एपीआई कुछ ऐसा है: http://example.com/json/?var1=x&var2=y&var3=z … जो क्वेरी पर आधारित उचित JSON उत्पन्न करता है।

मैं अपने JSON परिणामों को उत्पन्न करने के लिए PHP का उपयोग कर रहा हूं … JSON API तक पहुँच सीमित कर सकता है यह सुनिश्चित करने के लिए जितना आसान है कि API को केवल मेरे डोमेन से कॉल किया जा रहा है और दूरस्थ उपयोगकर्ता नहीं है ?

Solutions Collecting From Web of "मैं JSON पहुंच को कैसे प्रतिबंधित कर सकता हूं?"

आपके डोमेन तक पहुंच सीमित करने के लिए सामान्य विधि कुछ ऐसी सामग्री के साथ अंतराल है जो असीम रूप से चलती है।

उदाहरण के लिए:

 while(1);{"json": "here"} // google uses this method for (;;);{"json": "here"} // facebook uses this method 

इसलिए जब आप इसे XMLHttpRequest या किसी भी अन्य विधि के माध्यम से प्राप्त कर सकते हैं जो केवल आपके डोमेन पर प्रतिबंधित है, तो आप जानते हैं कि आपको अनंत लूप को पार्स करने की आवश्यकता है। लेकिन अगर यह स्क्रिप्ट नोड के माध्यम से प्राप्त किया जाता है:

 <script src="http://some.server/secret_api?..."></script> 

यह असफल हो जायेगा क्योंकि स्क्रिप्ट पहले वक्तव्य से परे कभी नहीं मिलेगी।

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

उपरोक्त तंत्र को देखते हुए, आपके एचटीएमएल पेज के संदर्भ के बाहर जेएसओएन एपीआई को कॉल करने से किसी को रोकने के लिए आप ज्यादा नहीं कर सकते।

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

तो, हम क्या कर सकते हैं?

यहां कमजोरी की पहचान करें:

http://www.example.com/json/getUserInfo.php?id=443

हमलावर अब आसानी से सभी उपयोगकर्ता जानकारी 1 से 1.000.000 तक पाशन में अनुरोध कर सकते हैं। auto_increment आईडी के कमजोर बिंदु उनकी रेखाचित्र हैं और ये अनुमान लगाने में आसान है

समाधान: अपने डेटा के लिए गैर-संख्यात्मक अद्वितीय पहचानकर्ता का उपयोग करें

http://www.example.com/json/getUserInfo.php?userid=XijjP4ow

आप उन पर लूप नहीं कर सकते। यह सच है, आप अभी भी सभी प्रकार की कुंजी के लिए कुंजी के लिए HTML पृष्ठों को पार्स कर सकते हैं, लेकिन इस तरह के हमले में भिन्न (और अधिक आसानी से निरुत्साहित) समस्या है।

नकारात्मक पक्ष: निश्चित रूप से आप इस पद्धति का उपयोग उन प्रश्नों को प्रतिबंधित करने के लिए नहीं कर सकते हैं जो कुंजी-आधारित नहीं हैं, जैसे खोज।

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

आप अपने एपीआई के पीछे का ऐप देख सकते हैं, एचपी रेफरर की जांच कर सकते हैं, लेकिन अगर कोई चाहता है तो नकल करना आसान है।

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

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

संक्षेप में उत्तर है: जो भी आपकी वेबसाइट के पन्नों तक पहुंच सकता है, वह भी आपके एपीआई तक पहुंचने में सक्षम होगा।

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

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

क्या आप, या आप कुकी आधारित प्रमाणीकरण का उपयोग कर सकते हैं? मेरा अनुभव ASP.NET रूपों प्रमाणीकरण पर आधारित है, लेकिन एक ही दृष्टिकोण PHP के साथ थोड़ा कोड के साथ व्यवहार्य होना चाहिए।

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

इस दृष्टिकोण को स्पष्ट रूप से कुकीज़ का उपयोग करने की आवश्यकता है, ताकि आपके लिए कोई समस्या हो या न हो।

क्षमा करें, शायद मैं गलत हूँ, लेकिन … क्या इसे HTTPS का उपयोग किया जा सकता है?

आप http ( s) : //example.com/json/? var1 = x & var2 = y के माध्यम से अपने (API) एक्सेस कर सकते हैं, इस प्रकार केवल प्रमाणित उपभोक्ता आपके डेटा प्राप्त कर सकते हैं …

क्षमा करें, वेब पर कोई DRM नहीं है 🙂

आप एक विश्वसनीय क्लाइंट के रूप में HTML का इलाज नहीं कर सकते यह एक सादा पाठ स्क्रिप्ट है जो अन्य लोगों के कंप्यूटर पर व्याख्या की जाती है, क्योंकि वे फिट दिखते हैं जो भी आप अपने "अपने" जावास्क्रिप्ट कोड की अनुमति देते हैं आप किसी को भी अनुमति देते हैं आप यह भी परिभाषित नहीं कर सकते कि जंगली में Greasemonkey और Firebug के साथ यह "तुम्हारा" कितना समय है

आपको सर्वर में सभी अभिगम नियंत्रण और व्यापारिक तर्क प्रतिबंधों को डुप्लिकेट करना होगा जैसे कि यह आपके जावास्क्रिप्ट क्लाइंट में मौजूद नहीं था।

सेवा को अपने एसएसओ में शामिल करें, प्रत्येक यूजर के पास यूआरएल की पहुंच को प्रतिबंधित करें, क्लाइंट को ध्यान में रखते हुए सेवा को डिज़ाइन करने के लिए डिज़ाइन करें, आपके अच्छे ढंग से जावास्क्रिप्ट कोड नहीं।