क्या "कर्ल-यू उपयोगकर्ता नाम: पासवर्ड http://example.com" सुरक्षित है?


30

है curl -u username:password http://example.comसुरक्षित?

यदि नहीं, तो क्या आप इसका संक्षिप्त विवरण दे सकते हैं कि कोई व्यक्ति आपका पासवर्ड कैसे प्राप्त कर सकता है?


6
यदि आप उस टर्मिनल में उपयोग कर रहे हैं, तो क्या आपके मन में है कि दोनों क्रेडेंशियल को बैश के इतिहास में संग्रहीत किया गया है?
फ्रांसिस्को तापिया

15
ऐसा आदेश सुरक्षित नहीं है क्योंकि कोई अन्य उपयोगकर्ता यह ps -efदेखने के लिए उपयोग कर सकता है कि कौन सी प्रक्रियाएं चल रही हैं। जब आप curl -u username:password http://example.comसूची में दिखाई देते हैं, तो आपके गंतव्य, उपयोगकर्ता नाम और पासवर्ड से समझौता किया जाता है।
लैंबर्ट

हालाँकि यह प्रश्न यहाँ विषय पर है, लेकिन आप सूचना सुरक्षा StackExchange
IQAndreas

जवाबों:


54

यह असुरक्षित है, क्योंकि CURL मूलभूत प्रमाणीकरण के लिए चूक करता है जहां HTTP प्रोटोकॉल आपके पासवर्ड को स्पष्ट पाठ में भेजता है। जब आप username:passwordस्ट्रिंग निर्दिष्ट करते हैं , तो यह HTTP हेडर में BASE64 स्ट्रिंग में परिवर्तित हो जाती है :

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

कोई भी आपके HTTP ट्रैफ़िक (आपका प्रदाता, आपके जैसे ही वायरलेस AP तक पहुँचने वाला कोई भी व्यक्ति) को इंटरसेप्ट करने में सक्षम होगा, बस ऑनलाइन BASE64 कनवर्टर का उपयोग करके पासवर्ड को पुनर्प्राप्त करने में सक्षम होगा ।

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

ध्यान दें कि एक ही मशीन पर अन्य उपयोगकर्ताओं के लिए कमांड तर्क उपलब्ध हो सकते हैं, उदाहरण के लिए ps -ef, / फाइल सिस्टम की खरीद, आप इतिहास को तोड़ते हैं, और अपने टर्मिनल लॉग में (@ लैम्बर्ट की टिप्पणी के लिए धन्यवाद)। कुछ प्लेटफार्मों पर cURL पासवर्ड को छिपाने का प्रयास करता है, उदाहरण के लिए ps -efआपके साथ पासवर्ड के बजाय रिक्त स्थान देखने की संभावना है। हालाँकि, पासवर्ड को कमांड लाइन तर्क के रूप में पारित करने के बजाय, सीधे पासवर्ड के लिए cURL होने से बेहतर है, जैसा कि cURL faq पर चर्चा की गई है ।


4
यहां तक ​​कि अगर आप एक ऐसे प्लेटफ़ॉर्म पर हैं जहां कर्ल सफलतापूर्वक डेटा छुपाने के लिए अपने स्वयं के argv को अधिलेखित करता है ps, तो एक अवधि है जब यह शुरू हो रहा है इससे पहले कि यह अधिलेखित किया जाता है जहां वह सामग्री असुरक्षित है।
चार्ल्स डफी

पाचन प्रमाणीकरण के बारे में क्या? क्या कर्ल डिफ़ॉल्ट रूप से उपयोग नहीं करता है?
rr-

2
@rr डाइजेस्ट प्रमाणीकरण केवल मामूली बेहतर है, क्योंकि यह मानव-मध्य हमलों को नहीं रोकता है, इसलिए आप HTTPS का उपयोग करके अभी भी बेहतर हैं।
दिमित्री ग्रिगोरीव

1
@rr आप कैसे करते हैं StartSSL अधिकांश ब्राउज़रों द्वारा विश्वसनीय नहीं है ? क्या आप कई विंडोज 95 या फ़ायरफ़ॉक्स 1.5 उपयोगकर्ताओं की उम्मीद करते हैं?
हेगन वॉन एटिजन


24

यह सुरक्षित नहीं है। कमांड लाइन पैरामीटर सभी उपयोगकर्ताओं को दिखाई देते हैं।


4
@Dmitry Grigoryev जवाब के साथ विलय यह सबसे सटीक एक हो सकता है।
फ्रांसिस्को तापिया

1
हाँ, मैं पूरी तरह से समस्या का बड़ा हिस्सा याद कर रहा हूँ जिसे मुझे स्वीकार करना चाहिए।
दिमित्री ग्रिगोरीव

कमांड केवल उपयोगकर्ता द्वारा पढ़ी जाने वाली स्क्रिप्ट का हिस्सा हो सकता है ...
पीट

2
@ प्रोग्राम निष्पादित करने की कमांड लाइन (चाहे वह स्क्रिप्ट से शुरू हो या टर्मिनल पर) आमतौर पर psकमांड और /procफाइल सिस्टम के माध्यम से सभी उपयोगकर्ताओं को दिखाई देती है। यदि कमांड जल्दी खत्म हो जाती है, तो जोखिम कम हो जाता है, लेकिन यह अभी भी है।
RBerteig

2
@ उत्तर उत्तर अनन्य होने वाले नहीं हैं, वे एक दूसरे के पूरक हैं। इसलिए दूसरे उत्तर के लिए पहले में बताए गए खतरे को छोड़ना ठीक है, बल्कि इसे दोहराना निरर्थक होगा। और मैं बयान को गलत नहीं कहूंगा क्योंकि यह हर मामले में सच नहीं है।
दिमित्री ग्रिगोरीव

1

यह --netrc-file पैरामीटर का उपयोग करके अधिक सुरक्षित तरीके से किया जा सकता है।

  1. 600 अनुमति के साथ एक फ़ाइल बनाएँ

उदाहरण के लिए: vi / root / my-file

मशीन example.com

लॉग इन यूज़रनेम

पासवर्ड पासवर्ड

फ़ाइल को सहेजें और बंद करें

  1. उपयोगकर्ता नाम और पासवर्ड के साथ URL तक पहुंचने के लिए नीचे का उपयोग करें।

कर्ल --netrc-file / root / my-file http://example.com

  1. किया हुआ

0

HTTP योजना का उपयोग करते समय यह असुरक्षित है। इसे सुरक्षित बनाने के लिए, आपको HTTPS का उपयोग करना चाहिए।

पासवर्ड को कमांड इतिहास में प्रदर्शित होने से छिपाने के लिए, केवल उपयोगकर्ता नाम प्रदान करें। यदि आदेश में प्रदान नहीं किया गया है, तो कर्ल पासवर्ड के लिए संकेत देगा।


HTTPS उपलब्ध नहीं होने पर उपयोगी उत्तर नहीं। cURL एक "क्लाइंट" है।
mckenzm

0

छोटा जवाब है नहीं ... लेकिन ...।

यदि कोई सर्वर साइड विकल्प नहीं हैं, तो आप सुरक्षा को सख्त कर सकते हैं।

  1. यदि यह स्थानीय इंट्रानेट है तो प्रसारण डोमेन को अलग करें, और वाईफाई या किसी रेडियो का उपयोग न करें।
  2. जैसा कि शेमर कहते हैं, एक .netrc फ़ाइल का उपयोग करें, मानों को कोड से बाहर रखें।
  3. यदि आप विश्वास करते हैं कि मेमोरी सुरक्षित है, तो पर्यावरण वेरिएंट का उपयोग करें। $ PSWD।
  4. यदि यह स्वचालन है, तो रूट के क्रॉस्टैब से चलाएं।
  5. ... एक कंटेनर में।
  6. ... एक एन्क्रिप्टेड डिस्क के साथ एक वीएम से।

इनमें से कोई भी HTTP का उपयोग करने वाले ब्राउज़र से कम सुरक्षित नहीं है।

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