Tên người dùng có phải là curl -u: mật khẩu http://example.com không?


30

curl -u username:password http://example.coman toàn không?

Nếu không, bạn có thể giải thích ngắn gọn về cách ai đó có thể lấy được mật khẩu của bạn không?


6
nếu bạn đang sử dụng nó trong một thiết bị đầu cuối, bạn có nhớ rằng cả hai thông tin đăng nhập đều được lưu trữ trong lịch sử của bash không?
Francisco Tapia

15
Lệnh này không an toàn vì người dùng khác có thể sử dụng ps -efđể xem tiến trình nào đang chạy. Khi bạn curl -u username:password http://example.comxuất hiện trong danh sách, đích đến, tên người dùng và mật khẩu của bạn bị xâm phạm.
Lambert

Mặc dù câu hỏi thuộc chủ đề ở đây, bạn cũng có thể quan tâm đến Bảo mật thông tin StackExchange
IQAndreas

Câu trả lời:


54

Nó không an toàn, vì cURL mặc định xác thực cơ bản nơi giao thức HTTP gửi mật khẩu của bạn dưới dạng văn bản rõ ràng. Khi bạn chỉ định username:passwordchuỗi, nó sẽ được chuyển đổi thành chuỗi BASE64 trong tiêu đề HTTP:

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

Bất cứ ai cũng có thể chặn lưu lượng HTTP của bạn (nhà cung cấp của bạn, bất kỳ ai truy cập cùng AP không dây như bạn, v.v.) sẽ có thể khôi phục mật khẩu chỉ bằng cách sử dụng trình chuyển đổi BASE64 trực tuyến .

Giao thức HTTPS sẽ làm cho mọi thứ tốt hơn bằng cách thiết lập kết nối được mã hóa trước khi tiêu đề này được gửi, ngăn mật khẩu không bị tiết lộ. Tuy nhiên, điều này chỉ áp dụng nếu người dùng chú ý khi được yêu cầu xác nhận các chứng chỉ không xác định, cho phép các ngoại lệ bảo mật, v.v.

Lưu ý rằng các đối số lệnh có thể có sẵn cho những người dùng khác trên cùng một máy để xem, ví dụ: ps -ef/ Proc filesystem, trong lịch sử bash của bạn và trong nhật ký thiết bị đầu cuối của bạn (cảm ơn vì nhận xét của @ Lambert lưu ý điều này). cURL trên một số nền tảng cố gắng ẩn mật khẩu, ví dụ như với ps -efbạn có thể thấy khoảng trống thay vì mật khẩu. Tuy nhiên, thay vì truyền mật khẩu làm đối số dòng lệnh, việc có cURL trực tiếp nhắc nhập mật khẩu sẽ tốt hơn, như đã thảo luận trên faq cURL .


4
Ngay cả khi bạn đang ở trên một nền tảng nơi cuộn tròn ghi đè thành công argv của chính nó để ẩn dữ liệu ps, vẫn có một khoảng thời gian bắt đầu trước khi ghi đè được thực hiện khi nội dung đó dễ bị tổn thương.
Charles Duffy

Điều gì về xác thực digest? Không cuộn tròn sử dụng theo mặc định?
rr-

2
@rr Xác thực Digest chỉ tốt hơn một chút, vì nó không ngăn chặn các cuộc tấn công trung gian, vì vậy bạn vẫn nên sử dụng HTTPS.
Dmitry Grigoryev

1
@rr Làm thế nào để bạn khẳng định StartSSL không được hầu hết các trình duyệt tin cậy ? Bạn có mong đợi nhiều người dùng Windows 95 hoặc Firefox 1.5 không?
Hagen von Eitzen 27/05/2015

1
@rr IMHO bạn chỉ nhận được sự không tin cậy nếu có sự cố với các certs trung gian bị thiếu (hoặc sai) trên máy chủ
Hagen von Eitzen

24

Nó không an toàn. Các tham số dòng lệnh được hiển thị cho tất cả người dùng.


4
Hợp nhất với câu trả lời @Dmitry Grigoryev, đây có thể là câu trả lời chính xác nhất.
Francisco Tapia

1
Vâng, tôi hoàn toàn bỏ lỡ phần lớn của vấn đề tôi phải thừa nhận.
Dmitry Grigoryev

lệnh có thể là một phần của tập lệnh mà người dùng chỉ có thể đọc được ...
Pete

2
Các dòng lệnh @Pete của các chương trình thực thi (cho dù bắt đầu từ tập lệnh hay tại thiết bị đầu cuối) thường được hiển thị cho tất cả người dùng thông qua pslệnh và /prochệ thống tệp. Nếu lệnh kết thúc nhanh chóng, rủi ro sẽ giảm, nhưng nó vẫn còn đó.
RBerteig

2
Câu trả lời @Pete không được coi là độc quyền, chúng bổ sung cho nhau. Vì vậy, câu trả lời thứ hai là bỏ qua mối đe dọa được giải thích trong lần đầu tiên, thay vào đó, nó sẽ là dư thừa để lặp lại nó. Và tôi sẽ không gọi tuyên bố là sai bởi vì nó không đúng trong mọi trường hợp có thể.
Dmitry Grigoryev

1

Điều này có thể được thực hiện theo cách an toàn hơn bằng cách sử dụng tham số tệp --netrc.

  1. Tạo một tệp với 600 quyền

Ví dụ: vi / root / my-file

máy ví dụ.com

tên đăng nhập

mật khẩu PASSWORD

Lưu và đóng tập tin

  1. Sử dụng bên dưới để truy cập URL với Tên người dùng và Mật khẩu.

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

  1. Làm xong

0

Nó không an toàn khi sử dụng lược đồ HTTP. Để đảm bảo an toàn, bạn nên sử dụng HTTPS.

Để ẩn mật khẩu xuất hiện trong lịch sử lệnh, chỉ cung cấp tên người dùng. Curl sẽ nhắc nhập mật khẩu, nếu không được cung cấp trong lệnh.


Không phải là một câu trả lời hữu ích nếu HTTPS không có sẵn. cURL là một "khách hàng".
mckenzm

0

Câu trả lời ngắn gọn là không ... nhưng ....

Nếu không có tùy chọn phía máy chủ, bạn có thể tăng cường bảo mật.

  1. Nếu đây là mạng nội bộ cục bộ thì hãy cách ly miền phát sóng và không sử dụng WiFi hoặc bất kỳ radio nào.
  2. Như Shameer nói, hãy sử dụng tệp .netrc, giữ các giá trị ngoài mã.
  3. Nếu bạn tin rằng bộ nhớ là an toàn, hãy sử dụng bình môi trường. $ PSWD.
  4. Nếu đây là tự động hóa, hãy chạy từ crontab của root.
  5. ... Trong một container.
  6. ... từ một VM với một đĩa được mã hóa.

Không có cái nào trong số này kém an toàn hơn trình duyệt sử dụng HTTP.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.