“ ชื่อผู้ใช้ curl -u: รหัสผ่าน http://example.com” ปลอดภัยหรือไม่


30

คือcurl -u username:password http://example.comความปลอดภัยหรือไม่

ถ้าไม่คุณสามารถให้คำอธิบายสั้น ๆ ว่าใครบางคนสามารถรับรหัสผ่านของคุณได้หรือไม่?


6
หากคุณกำลังใช้สิ่งนั้นในเทอร์มินัลคุณทราบหรือไม่ว่าข้อมูลประจำตัวทั้งสองจะถูกเก็บไว้ในประวัติของการทุบตี?
Francisco Tapia

15
คำสั่งดังกล่าวไม่ปลอดภัยเนื่องจากผู้ใช้รายอื่นอาจใช้ps -efเพื่อดูกระบวนการที่กำลังทำงานอยู่ เมื่อคุณcurl -u username:password http://example.comปรากฏในรายการปลายทางชื่อผู้ใช้และรหัสผ่านของคุณจะถูกบุกรุก
Lambert

แม้ว่าคำถามจะอยู่ในหัวข้อที่นี่ แต่คุณอาจสนใจในInformation Security StackExchange
IQAndreas

คำตอบ:


54

ไม่ปลอดภัยเนื่องจาก cURL จะใช้การตรวจสอบเบื้องต้นที่โปรโตคอล HTTP ส่งรหัสผ่านของคุณเป็นข้อความธรรมดา เมื่อคุณระบุusername:passwordสตริงมันจะถูกแปลงเป็นสตริงBASE64ในส่วนหัว HTTP:

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

ทุกคนสามารถที่จะสกัดกั้นการจราจร HTTP (ผู้ให้ของคุณทุกคนเข้าถึงไร้สาย AP เช่นเดียวกับคุณ ฯลฯ ) จะสามารถกู้คืนรหัสผ่านโดยเพียงแค่ใช้แปลง BASE64 ออนไลน์

โปรโตคอล HTTPS จะทำให้สิ่งต่าง ๆ ดีขึ้นด้วยการสร้างการเชื่อมต่อแบบเข้ารหัสก่อนที่จะส่งส่วนหัวนี้ป้องกันรหัสผ่านจากการเปิดเผย อย่างไรก็ตามสิ่งนี้ใช้ได้เฉพาะเมื่อผู้ใช้ให้ความสนใจเมื่อถูกขอให้ยืนยันใบรับรองที่ไม่รู้จักอนุญาตข้อยกเว้นด้านความปลอดภัยและอื่น ๆ

โปรดทราบว่าคำสั่งอาร์กิวเมนต์อาจพร้อมใช้งานสำหรับผู้ใช้รายอื่นบนเครื่องเดียวกันเพื่อดูเช่นps -ef/ ระบบไฟล์ proc ในประวัติทุบตีคุณและในบันทึกเทอร์มินัลของคุณ (ขอบคุณสำหรับความคิดเห็นของ @ Lambert ที่สังเกตสิ่งนี้) cURL ในบางแพลตฟอร์มพยายามซ่อนรหัสผ่านดังนั้นตัวอย่างเช่นps -efคุณอาจจะเห็นพื้นที่ว่างแทนรหัสผ่าน อย่างไรก็ตามแทนการส่งผ่านรหัสผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งมีม้วนพรอมต์โดยตรงสำหรับรหัสผ่านจะดีกว่าตามที่กล่าวไว้ในคำถามที่พบบ่อยม้วน


4
แม้ว่าคุณจะอยู่บนแพลตฟอร์มที่ curl สามารถเขียนทับ argv ของตัวเองเพื่อซ่อนข้อมูลได้สำเร็จpsมีช่วงเวลาหนึ่งที่เริ่มต้นก่อนที่การเขียนทับจะดำเนินการเมื่อเนื้อหานั้นมีความเสี่ยง
Charles Duffy

สิ่งที่เกี่ยวกับการตรวจสอบสิทธิ์ย่อย? ไม่ได้ขดใช้เป็นค่าเริ่มต้น?
rr-

2
การตรวจสอบสิทธิ์ @rr Digest นั้นดีขึ้นเล็กน้อยเนื่องจากไม่ได้ป้องกันการโจมตีแบบคนกลางดังนั้นคุณจะยังดีกว่าด้วยการใช้ HTTPS
Dmitry Grigoryev

1
@rr คุณยืนยันเบราว์เซอร์ส่วนใหญ่ที่ StartSSL ไม่เชื่อถือได้อย่างไร คุณคาดหวังว่าผู้ใช้ Windows 95 หรือ Firefox 1.5 หลายคน?
Hagen von Eitzen

1
@rr IMHO คุณไม่น่าเชื่อถือเฉพาะในกรณีที่มีปัญหากับการขาดหายไป (หรือผิด) certs กลางบนเซิร์ฟเวอร์
Hagen von Eitzen

24

มันไม่ปลอดภัย ผู้ใช้ทุกคนสามารถเห็นพารามิเตอร์บรรทัดคำสั่งได้


4
การผสานกับ @Dmitry Grigoryev อาจเป็นคำตอบที่ถูกต้องที่สุด
Francisco Tapia

1
ใช่ฉันพลาดส่วนใหญ่ของปัญหาที่ฉันต้องยอมรับ
Dmitry Grigoryev

คำสั่งอาจเป็นส่วนหนึ่งของสคริปต์ที่ผู้ใช้สามารถอ่านได้เท่านั้น ...
Pete

2
@Pete บรรทัดคำสั่งของการเรียกใช้งานโปรแกรม (ไม่ว่าจะเริ่มจากสคริปต์หรือที่เทอร์มินัล) โดยทั่วไปแล้วผู้ใช้ทุกคนจะเห็นpsคำสั่งผ่านระบบคำสั่งและ/procระบบไฟล์ หากคำสั่งเสร็จสิ้นอย่างรวดเร็วความเสี่ยงจะลดลง แต่ก็ยังอยู่ที่นั่น
RBerteig

2
@Pete Answers ไม่ควรจะเป็นแบบพิเศษ แต่จะเติมเต็มซึ่งกันและกัน ดังนั้นมันก็โอเคสำหรับคำตอบที่สองที่จะละเว้นการคุกคามที่อธิบายไว้ในครั้งแรก แต่มันจะซ้ำซ้อนในการทำซ้ำ และฉันจะไม่เรียกคำแถลงว่าผิดเพราะไม่เป็นจริงในทุกกรณี
Dmitry Grigoryev

1

สิ่งนี้สามารถทำได้ในวิธีที่ปลอดภัยยิ่งขึ้นโดยใช้พารามิเตอร์ --netrc-file

  1. สร้างไฟล์ที่ได้รับอนุญาต 600

ตัวอย่างเช่น: vi / root / my-file

เครื่อง example.com

ลงชื่อเข้าใช้ USERNAME

รหัสผ่าน PASSWORD

บันทึกและปิดไฟล์

  1. ใช้ด้านล่างเพื่อเข้าถึง URL ด้วยชื่อผู้ใช้และรหัสผ่าน

curl --netrc-file / root / my-file http://example.com

  1. เสร็จสิ้น

0

ไม่ปลอดภัยเมื่อใช้รูปแบบ HTTP เพื่อให้ปลอดภัยคุณควรใช้ HTTPS

หากต้องการซ่อนรหัสผ่านไม่ให้ปรากฏในประวัติคำสั่งให้ระบุชื่อผู้ใช้เท่านั้น Curl จะถามรหัสผ่านหากไม่ได้ระบุไว้ในคำสั่ง


ไม่ใช่คำตอบที่มีประโยชน์หาก HTTPS ไม่สามารถใช้ได้ cURL เป็น "ลูกค้า"
mckenzm

0

คำตอบสั้น ๆ คือไม่ ... แต่ ....

หากไม่มีตัวเลือกด้านเซิร์ฟเวอร์คุณสามารถเพิ่มความปลอดภัยได้

  1. หากนี่เป็นอินทราเน็ตเฉพาะที่ให้แยกโดเมนการออกอากาศและห้ามใช้ WiFi หรือวิทยุ
  2. ดังที่ Shameer กล่าวให้ใช้ไฟล์. netrc เก็บค่าไว้ในโค้ด
  3. หากคุณเชื่อถือหน่วยความจำนั้นปลอดภัยให้ใช้ vars สำหรับสภาพแวดล้อม $ PSWD
  4. หากนี่เป็นระบบอัตโนมัติให้เรียกใช้จาก crontab ของรูท
  5. ... ในภาชนะ
  6. ... จาก VM พร้อมดิสก์ที่เข้ารหัส

สิ่งเหล่านี้ไม่มีความปลอดภัยน้อยกว่าเบราว์เซอร์ที่ใช้ HTTP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.