it-swarm-vi.com

SSL với GET và POST

Tôi khá mới đối với bảo mật, vì vậy hãy tha thứ cho câu hỏi cơ bản của tôi, nhưng SSL có mã hóa POST yêu cầu nhưng không NHẬN yêu cầu không?

Chẳng hạn, nếu tôi có hai yêu cầu

NHẬN: www.mycoolsite.com/index?id=1&type=xyz

POST

trang web: www.mycoolsite.com/index {Params: id = 1 & type = xyz}

Có an toàn không khi cho rằng ai đó có thể chặn toàn bộ yêu cầu GET (đọc id và loại), nhưng nếu họ chặn POST thì họ sẽ có thể thấy đường dẫn trang, nhưng vì nó Đang vượt qua SSL, họ không thể thấy thông số của id và loại?

58
TomJ

Bây giờ, câu hỏi là, bạn có biết yêu cầu HTTP trông như thế nào không?

Chà, giả sử là không, đây là một ví dụ về một:

GET /test?param1=hello&param2=world HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

Tất cả của thông tin này được quy định trong vận chuyển SSL - như nhận xét về câu trả lời của bạn vui lòng nói. Điều này có nghĩa là:

  • Nhận thông số được mã hóa.
  • Thân HTTP (thông số bài) được mã hóa.

Những gì không nhất thiết phải an toàn:

  • Máy chủ bạn đang yêu cầu. Hầu hết các máy chủ web ngày nay đều hỗ trợ Host: something tham số để nhiều tên miền có thể được xử lý bởi một máy chủ web trên một giao diện và địa chỉ IP. Rõ ràng, tiêu đề này is được mã hóa, tuy nhiên, nếu bạn chạy lưu lượng truy cập không https đến trang web thì rõ ràng bạn có thể kết nối với máy chủ nào. Ngay cả khi đó không phải là trường hợp, DNS ngược chắc chắn sẽ cho bạn biết những gì được lưu trữ trên IP đó và bạn có thể đoán được hợp lý từ đó.
  • Thông tin trình duyệt/khách hàng của bạn. Thật không may, mỗi ứng dụng khách https là khác nhau và quá trình đàm phán của nó có thể có khả năng cung cấp nền tảng mà nó chạy trên nền tảng hoặc trình duyệt nào. Dù sao đi nữa, đây không phải là ngày tận thế, đó chỉ là sự thật để hiểu.

Các yêu cầu POST trông tương tự để nhận các yêu cầu, ngoại trừ chúng có chứa một cơ thể. Điều này có thể trông như thế này:

POST /testpost HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

param1=hello&param2=hello

Có một số biến thể phức tạp hơn, tất nhiên, nhưng về cơ bản tất cả đều được mã hóa.

59
user2213

Tôi không thấy điều này được đề cập trong các phản hồi khác, nhưng bạn thường không nên đưa thông tin bí mật (mật khẩu) vào các yêu cầu GET ngay cả với SSL, mà thay vào đó hãy sử dụng POST. Tại sao? URL với thông tin nhạy cảm thường sẽ được ghi lại ở cả hai đầu; ví dụ: trong danh sách lịch sử trình duyệt của bạn (https://www.example.com?user=me&password=MyPassword) cũng như nhật ký trên máy chủ. POST thông tin (đặc biệt là với mật khẩu) thường không được ghi vào nhật ký máy chủ web, mặc dù rõ ràng có thể được định cấu hình để ghi nhật ký - vì vậy tốt nhất không nên sử dụng lại (hoặc sử dụng mật khẩu tương tự) tại các trang web khác nhau.

36
dr jimbob

SSL mã hóa và đảm bảo tính xác thực của toàn bộ kết nối, bao gồm cả phương thức và URL được yêu cầu. Một GET cũng được bảo vệ tốt như một POST.

Khi SSL hoạt động như dự định, kẻ nghe trộm chỉ có thể thấy địa chỉ IP nào đang kết nối với địa chỉ IP nào (và trên cổng nào, nhưng thường là 443), vào thời gian nào và bao nhiêu. Nếu có nhiều máy chủ ảo trên cùng một máy, kẻ tấn công không thể biết bạn đang liên hệ với máy chủ nào (tuy nhiên, kẻ nghe trộm có thể thấy các yêu cầu DNS của bạn ngay trước yêu cầu HTTPS và đoán đúng). Tất cả thông tin này cũng được xác thực: kẻ tấn công đang hoạt động không thể chơi man-in-the-middle và sửa đổi dữ liệu trong quá trình.

Những thứ có thể khiến SSL không hoạt động như dự định:

  • Ứng dụng lạm dụng, trong đó một số dữ liệu vô tình được gửi qua HTTP đơn giản.
  • Một trong những lỗ hổng hiếm gặp trong giao thức SSL, chẳng hạn như lỗ hổng BEAST gần đây .
  • Thao tác chứng chỉ xấu, cho phép kẻ tấn công biến thành máy chủ, vì chứng chỉ của máy chủ đã bị rò rỉ, cơ quan chứng nhận đã gửi chứng chỉ không đúng cho kẻ tấn công hoặc vì máy khách không kiểm tra chính xác chứng chỉ của máy chủ.
    • Trong lưu ý này, hãy nhớ rằng SSL, vì nó được sử dụng hầu hết thời gian, xác thực máy chủ nhưng không phải máy khách. Máy chủ không thể thừa nhận bất cứ điều gì về khách hàng.
  • Một tấn công kênh bên có thể tiết lộ một số thông tin cho kẻ nghe trộm. Ví dụ: thời gian chính xác mà người tham gia gửi dữ liệu có thể tiết lộ điều gì đó về cách dữ liệu được tính toán và do đó về bản chất của dữ liệu. Kích thước của mỗi gói cũng được biết đến với kẻ tấn công. Làm thế nào tiết lộ điều này có thể phụ thuộc vào việc những người tham gia có đề phòng và vào bản chất của thông tin. Một cuộc trò chuyện thời gian thực có xu hướng phân tích lưu lượng truy cập như vậy nhiều hơn so với việc tải xuống một tệp.

Xem thêm Làm thế nào có thể mọi người quan sát kết nối HTTPS được thiết lập sẽ không biết cách giải mã nó? cho một số nền tảng.

Chỉ cần thêm một chi tiết nhỏ nữa, như cách thực hiện điều này qua HTTP.
[.__.] Có lẽ bạn đang tự hỏi (hoặc bạn nên, nếu bạn biết quen thuộc với bắt tay SSL ), cách tạo kênh SSL, mà không yêu cầu GET được gửi không được mã hóa? Điều gì về nếu yêu cầu của tôi phải thông qua một proxy - làm thế nào là có thể?

HTTP v1.1 đã giới thiệu KẾT NỐI Phương thức HTTP, về cơ bản gửi yêu cầu đơn giản đến máy chủ thông qua proxy, chỉ chứa URL Máy chủ đơn giản nhất (không có thêm bất kỳ URL nào tham số, tiêu đề hoặc cơ thể). Dựa trên yêu cầu này, một đường hầm SSL được xây dựng và sau đó yêu cầu GET (hoặc POST) ban đầu được gửi qua nó.

6
AviD

Một điểm khác không được đề cập là nếu bạn sử dụng GET và có bất kỳ nội dung bên thứ ba được nhúng hoặc liên kết nào (ví dụ: quảng cáo trang web) thì trang web bên thứ ba đó sẽ nhận được URL đầy đủ (với dữ liệu tham số nhạy cảm) trong tiêu đề Người giới thiệu.

Điều đó làm lộ dữ liệu cho các bên thứ ba, những người không nên có nó.

4
Rodney

Nguồn: Trả lời về Stack Overflow

phương thức GET chỉ dành cho truy xuất dữ liệu và không nên có bất kỳ tác dụng phụ nào . Nhưng POST có nghĩa cho mục đích cụ thể đó: thay đổi dữ liệu ở phía máy chủ.

Yêu cầu GET có thể dễ dàng bị hủy bỏ (xem Giả mạo yêu cầu chéo trang ) bằng cách chỉ đặt một hình ảnh trên một trang trong khi giả mạo POST yêu cầu không dễ dàng (điều này cũng không dễ dàng) một lý do tại sao bạn chỉ nên cho phép POST yêu cầu).

4
goodguys_activate