2017-04-17 10 views
6

मैं almaconnect.com पर था, होम पेज पर एक टेक्स्टबॉक्स है जो टाइप करते समय विश्वविद्यालयों के कुछ परिणामों को स्वत: सुझाव देता है (AJAX कॉल करके सामग्री लोड करें)। मैं बनाने के लिए किया था एक ही ajax कॉल लेकिन अनुरोध की एक कर्ल अनुरोध टर्मिनलAJAX सामग्री को सुरक्षित करने के लिए कैसे करें

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

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

उत्तर

9

जब आप कर्ल कॉल करते हैं तो टर्मिनल में जो भी बाइनरी डेटा दिखाई देता है वह एन्क्रिप्टेड सामग्री नहीं है। यह सिर्फ संपीड़ित सामग्री है। यदि फ़ाइल

file output 

चलाकर किसी भी ज्ञात फ़ाइल स्वरूपों से मेल खाता है आप देखेंगे आप

curl $params > output 

चलाकर यह सत्यापित कर सकते हैं आप देख सकते हैं कि

output: gzip compressed data, from Unix 

को कुछ इसी तरह के रूप में परिणाम gzip -d -c output रनिंग टर्मिनल स्क्रीन पर सादे टेक्स्ट सामग्री को डिक्रप्रेस और प्रिंट करेगा।

कारण

कारण है कि ऐसा होता है क्योंकि, आप कर्ल कॉल के साथ accept-encoding हैडर भेज है। ब्राउज़र के विपरीत, कर्ल स्वचालित रूप से परिणाम को डिक्रप्रेस नहीं करता है। इस भ्रम का यही कारण है।

-H 'Accept-Encoding: gzip, deflate, br' 

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

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

सारांश

almaconnect.com वास्तव में अपने AJAX प्रतिक्रियाओं अंधेरा करना किसी भी अतिरिक्त कदम उठाने के लिए नहीं है। और आमतौर पर ऐसा करना एक बुरा विचार है। जो भी तरीका आप अपने प्रतिक्रियाओं को खराब करने के लिए नियोजित करते हैं (जैसे HTTP रेफरर फ़ील्ड का उपयोग करना), लोग हमेशा उन्हें हराने के लिए काउंटर-उपायों के साथ आ सकते हैं।

यह एक तंत्र के साथ आने के लिए प्रयास और समय लगाने के लिए समय के लायक नहीं है जो अंततः एक निर्धारित हमलावर द्वारा तोड़ दिया जाएगा।

+0

धन्यवाद @ gtux, "एन्कोडिंग स्वीकार करें" मुझे यहां भ्रमित कर रहा था, आश्चर्यजनक रूप से समझाया। –

0

सर्वर एक एन्क्रिप्टेड प्रतिक्रिया लौटा रहा है जिसके बाद इसकी रसीद जावास्क्रिप्ट का उपयोग कर ग्राहक अंत में डिक्रिप्ट हो गई है। आप कुछ एन्क्रिप्शन में अपनी सर्वर प्रतिक्रिया भेजकर ऐसा कर सकते हैं जिसे क्लाइंट साइड पर डिक्रिप्ट किया जाएगा। इसका एक उदाहरण क्रिप्टो जेएस हो सकता है। इस पर एक नज़र डालें: Encrypt with PHP, Decrypt with Javascript (cryptojs)

+0

लेकिन वे कुछ कर रहे हैं अलग तरह से अगर आप फ़ायरबग जवाब में देख एन्क्रिप्टेड नहीं है कारण। –

0

शायद वे AJAX अनुरोध के लिए HTTP_REFERER मान देख रहे हैं। यदि HTTP_REFERER वेबसाइट नहीं है, तो यह एक एन्क्रिप्टेड प्रतिक्रिया वापस कर सकता है।

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

+0

मैं अपने कर्ल अनुरोध में रेफरर सेट कर रहा हूं ताकि यह मामला न हो। –

1

यह संभव नहीं है।

answer from gtux एन्क्रिप्टेड सामग्री के नहीं, संकुचित सामग्री के बाइनरी वर्ण क्यों देख रहे हैं, इसके कारण बताते हैं।

नोट यह बहुत ही सरल संस्करण में काम करता है कि:

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' 

जवाब from gaganshera आप सामग्री अंधेरा करना के लिए एक रास्ता दिखा सकता है, लेकिन वास्तव में सामग्री की रक्षा के लिए इसका मतलब यह नहीं है, सिर्फ लोगों के लिए एक छोटे से कठिन बनाने के लिए इसे देखने के लिए, क्योंकि डिक्रिप्शन कोड सार्वजनिक पृष्ठों में है।

आपकी साइट सुरक्षा (लॉगिन + सेट कुकी) द्वारा सुरक्षित की जा सकती है या सार्वजनिक हो सकती है। यदि सुरक्षित है, तो सुरक्षा कोड कुकी हेडर की जांच करता है। यदि सार्वजनिक है तो सामग्री को खराब करने के केवल तरीके हैं, इसकी रक्षा न करें।

https://stackoverflow.com/a/14570971/1536382

https://www.quora.com/How-can-we-hide-JSON-data-from-tools-like-Chrome-development-tools-and-Firebug-etc-as-a-security-beyond-https

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