Subomain.example.com có ​​thể đặt cookie có thể được đọc bởi example.com không?


26

Tôi chỉ đơn giản là không thể tin rằng điều này là khá khó để xác định.

Ngay cả khi đã đọc RFC, tôi cũng không rõ nếu một máy chủ tại subomain.example.com có ​​thể đặt cookie có thể được đọc bởi example.com.

subomain.example.com có ​​thể đặt cookie có thuộc tính Tên miền là .example.com. RFC 2965 dường như tuyên bố rõ ràng rằng một cookie như vậy sẽ không được gửi đến example.com, nhưng sau đó nói một cách công bằng rằng nếu bạn đặt Domain = example.com, một dấu chấm được đặt trước, như thể bạn đã nói .example.com. Được kết hợp với nhau, điều này dường như nói rằng nếu example.com trả về đặt cookie với Domain = example.com, thì nó sẽ không lấy lại cookie đó! Điều đó không thể đúng.

Bất cứ ai có thể làm rõ các quy tắc thực sự là gì?


Câu hỏi này đáng lẽ đã bị đóng / di chuyển trở lại khi được hỏi, nhưng vì nó đã thu hút được nhiều sự chú ý nên tôi sẽ khóa nó thay vì đóng lại. Xem stackoverflow.com/questions/3089199/ cho bản dupe, trên trang web chính xác.
Chris S

Câu trả lời:


30

Trích dẫn từ cùng RFC2109 bạn đọc:

       * Set-Cookie từ máy chủ yêu cầu x.foo.com cho Miền = .foo.com sẽ
         Được chấp nhận.

Vì vậy, subdomain.example.comcó thể thiết lập một cookie cho .example.com. Càng xa càng tốt.

       Các quy tắc sau áp dụng để chọn giá trị cookie áp dụng từ
       trong số tất cả các cookie các tác nhân người dùng có.

       Lựa chọn tên miền
            Tên máy chủ đủ điều kiện của máy chủ gốc phải khớp tên miền
            thuộc tính miền của cookie

Vì vậy, chúng ta có một trận đấu tên miền?

   * A là một chuỗi FQDN và có dạng NB, trong đó N là một tên không trống
     chuỗi, B có dạng .B 'và B' là chuỗi FQDN. (Vì vậy, xycom
     khớp tên miền .y.com nhưng không phải y.com.)

Nhưng bây giờ example.comsẽ không khớp tên miền .example.comtheo định nghĩa. Nhưng www.example.com(hoặc bất kỳ "tên không trống" nào khác trong miền) sẽ. RFC về mặt lý thuyết đã bị lỗi thời bởi RFC2965 , trong đó chỉ ra những điều về việc buộc một dấu chấm hàng đầu cho các tên miền trong Set-Cookie2hoạt động.

Quan trọng hơn, như được lưu ý bởi @Tony, là thế giới thực. Để có cái nhìn tổng quát về những gì tác nhân người dùng thực tế đang làm, hãy xem

NsCookieService.cpp của Firefox 3

Cookie_monster.cc của Chrome

Đối với quan điểm vào những gì các trang web thực tế đang làm, hãy thử chơi với wgetsử dụng --save-cookies, --load-cookies--debugđể xem những gì đang xảy ra.

Bạn có thể thấy rằng trên thực tế hầu hết các trang web đang sử dụng một số kết hợp Set-Cookietừ thông số RFC cũ hơn với các giá trị "Máy chủ", hoàn toàn không có dấu chấm hàng đầu (như twitter.com ) hoặc đặt giá trị Miền (có dấu chấm hàng đầu) và chuyển hướng đến một máy chủ như www.example.com(như google.com ).


Vậy làm thế nào để www.example.com và example.com (thường trỏ đến cùng một trang) sử dụng cùng một cookie? Sự lãnh đạo . không thể được yêu cầu trong hầu hết các trình duyệt nếu không cách sử dụng phổ biến này sẽ không hoạt động.
JamesRyan

Dấu chấm hàng đầu chỉ bị ép buộc bởi RFC gần đây hơn. example.com có ​​thể đặt cookie cho "example.com" và ".example.com"; cái sau có thể được đọc bởi www.example.com. Sử dụng các lệnh wget hiển thị để xem những gì đang xảy ra.
medina

@medina, Người dùng có thể đặt cookie tại x1.yz và đọc nó tại x2.yz không?
Pacerier

@Pacerier Chỉ khi (1) bạn đặt cookie cho y.zvà (2) tác nhân người dùng thực hiện RFC 6265.
Michael Hampton

@MichaelHampton, các trình duyệt không triển khai RFC 6265?
Pacerier

2

Nếu trình duyệt thực hiện RFC 6265 , điều mà bất kỳ trình duyệt hiện đại nào sẽ thực hiện vào thời điểm này, thì một cookie được đặt .example.comsẽ có dấu chấm hàng đầu bị bỏ qua (phần 5.2.3) và sau đó cookie sẽ được gửi đến miền trần và tất cả tên miền phụ.

Đừng dựa vào hành vi này nếu bạn có lưu lượng truy cập đáng kể từ các trình duyệt cũ hơn; RFC này chỉ có từ năm 2011.


1

Nó không nên là có thể. Tuy nhiên, như bạn đã nói, vì đây không phải là một tiêu chuẩn được ghi chép rộng rãi, nên nó phụ thuộc vào phần mềm bạn đang sử dụng.

Hầu hết các trình duyệt hiện đại tuân thủ một "mô hình bảo mật web" đã xác định. Mô hình chi phối hiệu quả hành vi của các trình duyệt liên quan đến bảo mật, trên những thứ như cookie (cụ thể là cách chúng sẽ được gửi trở lại bất kỳ trang web cụ thể nào). Mô hình cũng có quy tắc "trình duyệt không gửi cookie đến các tên miền không đặt chúng."

Điều đó đang được nói, domain.com sẽ có thể đặt cookie cho js.domain.com. js.domain.com, tuy nhiên, chỉ có thể đặt cookie cho chính nó. Nhưng tất cả phụ thuộc vào trình duyệt bạn đang sử dụng.

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.