Tôi có hai dịch vụ HTTP chạy trên một máy. Tôi chỉ muốn biết liệu họ có chia sẻ cookie của họ hoặc liệu trình duyệt có phân biệt giữa hai socket máy chủ hay không.Cổng cookie HTTP có cụ thể không?
Trả lời
Đặc tả cookie hiện tại là RFC 6265, thay thế RFC 2109 và RFC 2965 (cả RFC hiện được đánh dấu là "Lịch sử") và chính thức hóa cú pháp cho việc sử dụng cookie trong thế giới thực. Nó nêu rõ:
- Giới thiệu
...
Vì lý do lịch sử, cookies chứa một số infelicities an ninh và sự riêng tư. Ví dụ, một máy chủ có thể chỉ ra rằng một cookie nhất định được thiết kế cho các kết nối "an toàn", nhưng thuộc tính Secure không cung cấp tính toàn vẹn trong sự hiện diện của kẻ tấn công mạng đang hoạt động. Tương tự, cookie cho một máy chủ được chia sẻ trên tất cả các cổng trên máy chủ đó, mặc dù chính sách "cùng nguồn gốc" được sử dụng bởi trình duyệt web phân tách nội dung được truy xuất qua các cổng khác nhau.
Và cũng:
8,5. Bảo mật yếu
Cookie không cung cấp cách ly bằng cổng. Nếu một cookie có thể đọc được bởi một dịch vụ đang chạy trên một cổng, cookie cũng có thể đọc được bởi một dịch vụ đang chạy trên một cổng khác của cùng một máy chủ. Nếu một cookie có thể ghi bởi một dịch vụ trên một cổng, cookie cũng có thể ghi bởi một dịch vụ đang chạy trên một cổng khác của cùng một máy chủ. Vì lý do này, máy chủ KHÔNG NÊN chạy cả hai dịch vụ không tin tưởng lẫn nhau trên các cổng khác nhau của cùng một máy chủ và sử dụng cookie để lưu trữ thông tin nhạy cảm về bảo mật.
Đó là tùy chọn.
Cổng có thể được chỉ định để cookie có thể là cổng cụ thể. Nó không cần thiết, máy chủ web/ứng dụng phải quan tâm đến điều này.
Nguồn: German Wikipedia article, RFC2109 Chương 4.3.1
Đây là một vùng màu xám lớn trong cookie SOP (Same xứ Policy).
Về mặt lý thuyết, bạn có thể chỉ định số cổng trong miền và cookie sẽ không được chia sẻ. Trong thực tế, điều này không làm việc với một số trình duyệt và bạn sẽ chạy vào các vấn đề khác. Vì vậy, điều này chỉ khả thi nếu trang web của bạn không dành cho công chúng và bạn có thể kiểm soát những trình duyệt nào để sử dụng.
Cách tiếp cận tốt hơn là lấy 2 tên miền cho cùng một IP và không dựa vào số cổng cho cookie.
Nó không phải là màu xám khu vực nữa. [RFC 6265] (http://tools.ietf.org/html/rfc6265), là tiêu chuẩn cookie hiện tại, loại bỏ bất kỳ sự nhầm lẫn nào về nó bằng cách loại bỏ khả năng tách cookie trên cùng một máy chủ bằng các cổng khác nhau. –
Theo RFC2965 3.3.1 (mà có thể hoặc không thể được theo sau bởi các trình duyệt), trừ khi cảng được quy định một cách rõ ràng thông qua port
tham số của Set-Cookie
header, cookie có thể hoặc có thể không được gửi đến bất kỳ cảng.
Google Browser Security Handbook nói: theo mặc định, phạm vi cookie được giới hạn cho tất cả URL trên tên máy chủ hiện tại - và không bị ràng buộc với thông tin cổng hoặc giao thức. và một số dòng sau Không có cách nào để giới hạn cookie cho một tên DNS duy nhất [...] tương tự như vậy, không có cách nào giới hạn chúng vào một cổng cụ thể. (Ngoài ra, xin lưu ý rằng IE không đưa các số cổng vào chính sách cùng nguồn gốc tại tất cả.)
Vì vậy dường như không an toàn để dựa vào bất kỳ hành vi nào được xác định rõ ở đây.
[RFC 6265] (http://tools.ietf.org/html/rfc6265), thay thế RFC 2965, loại bỏ tham số 'Port' trong tiêu đề' Set-Cookie' (vì hầu như không ai thực sự sử dụng nó trong thực tế) , và làm cho nó rất rõ ràng rằng các tập tin cookie trên cùng một máy chủ KHÔNG bị trục trặc bởi các cảng nữa. –
IE 9 thậm chí sẽ không gửi lại cookie về các yêu cầu tiếp theo nếu miền có cổng trong đó – axk
Có trình duyệt nào vẫn đang xem xét cổng trong SOP của cookie không? – Bertuz
Một cách khác để khắc phục sự cố, là đặt tên cho cookie phiên là cổng có liên quan. Ví dụ:
- mysession8080 cho máy chủ chạy trên cổng 8080
- mysession8000 cho máy chủ chạy trên cổng 8000
Mã của bạn có thể truy cập vào cấu hình máy chủ web để tìm ra cổng máy chủ của bạn sử dụng và đặt tên cho cookie tương ứng.
Hãy nhớ rằng ứng dụng của bạn sẽ nhận được cả hai cookie và bạn cần phải yêu cầu ứng dụng tương ứng với cổng của bạn.
Không cần phải có số cổng chính xác trong tên cookie, nhưng điều này thuận tiện hơn.
Nói chung, tên cookie có thể mã hóa bất kỳ thông số nào khác cụ thể cho cá thể máy chủ bạn sử dụng, do đó nó có thể được giải mã bằng ngữ cảnh phù hợp.
Trong IE 8, cookie (chỉ được xác minh đối với máy chủ cục bộ) được chia sẻ giữa các cổng. Trong FF 10, họ không.
Tôi đã đăng câu trả lời này để người đọc sẽ có ít nhất một tùy chọn cụ thể để kiểm tra từng kịch bản.
Đây là một câu hỏi thực sự cũ nhưng tôi nghĩ rằng tôi sẽ thêm một workaround tôi sử dụng.
Tôi có hai dịch vụ đang chạy trên máy tính xách tay của mình (một trên cổng 3000 và cổng còn lại trên 4000). Khi tôi chuyển qua lại giữa (http://localhost:3000
và http://localhost:4000
), Chrome sẽ chuyển vào cùng một cookie, mỗi dịch vụ sẽ không hiểu cookie và tạo một cookie mới.
Tôi thấy rằng nếu tôi truy cập http://localhost:3000
và http://127.0.0.1:4000
, sự cố đã biến mất kể từ khi Chrome lưu cookie cho máy chủ cục bộ và một cookie cho 127.0.0.1.
Một lần nữa, không ai có thể quan tâm vào thời điểm này nhưng nó rất dễ dàng và hữu ích cho tình huống của tôi.
Có, vì cookie được liên kết với tên máy chủ/tên miền nên cookie trên 'localhost' không thể được chia sẻ với' 127.0.0.1' và ngược lại. Nhưng cookie trên cùng một máy chủ/tên miền, bất kể cổng, có thể chia sẻ được không. –
Điều này có thể chỉ hoạt động trong Chrome, vì hầu hết các trình duyệt khác không gửi cookie đến "localhost" (= một chuỗi không có hai chấm) – Max
Tất nhiên là có. Tôi (và có thể là hàng triệu nhà phát triển khác) sử dụng localhost để kiểm tra mọi lúc. Trừ khi cổng bổ sung tạo sự khác biệt: http: // localhost: 8080/ –
Tôi đã gặp sự cố tương tự đang chạy (và cố gắng gỡ lỗi) hai ứng dụng Django khác nhau trên cùng một máy.
Tôi đã chạy chúng với các lệnh:
./manage.py runserver 8000
./manage.py runserver 8001
Khi tôi đã đăng nhập trong một đầu tiên và sau đó trong một giây tôi luôn luôn bị đăng xuất khỏi người đầu tiên và ngược lại.
tôi thêm này tôi /etc/hosts
127.0.0.1 app1
127.0.0.1 app2
Sau đó, tôi bắt đầu hai ứng dụng với các lệnh:
./manage.py runserver app1:8000
./manage.py runserver app2:8001
vấn đề giải quyết :)
- 1. cách xóa giá trị cookie cụ thể?
- 2. C# - WebRequest HTTP POST với Cookie (cổng từ kịch bản curl)
- 3. WCF TCP và HTTP có thể kết nối cùng một cổng không?
- 4. theo dõi một IP và cổng cụ thể
- 5. Nginx proxy https tới http trên cổng không chuẩn?
- 6. Http POST giảm cổng trong URL
- 7. Có thể xóa cookie miền phụ không?
- 8. Công cụ dành cho nhà phát triển Chrome> tài nguyên> cookie> http cột, dấu kiểm ở đây có chỉ ra cookie HttpOnly không?
- 9. Có thể sử dụng CSRF khi không có Cookie không?
- 10. Mở cổng HTTP trên Amazon EC2
- 11. Play2-mini và Akka2 cho cổng HTTP
- 12. Cookie trên HTTP và HTTPS trong PHP
- 13. Làm cách nào tôi có thể mở số cổng cụ thể trong hệ thống cửa sổ
- 14. VS2010 thay đổi cổng cụ thể một cách ngẫu nhiên
- 15. Cách chạy dịch vụ WCF trên một cổng cụ thể
- 16. cách nhận tin nhắn văn bản đến cổng cụ thể ..
- 17. Đặt cookie ở Golang (net/http)
- 18. Gửi chuyển hướng đến các cổng cụ thể
- 19. gửi cookie với http post android
- 20. Nhiều tiêu đề Set-cookie trong HTTP
- 21. Đặt cookie phiên cho tên miền phụ cụ thể
- 22. Cookie phiên chỉ dành cho các tuyến đường cụ thể
- 23. Cách lấy tên miền của một cookie cụ thể?
- 24. Có thể một tên miền có nhiều cookie không?
- 25. Quản lý cookie HTTP trên iPhone
- 26. Tôi có thể quét nhanh mạng cục bộ của mình để biết các cổng mở cụ thể không?
- 27. Cookie và trang web Django- phiên trên nhiều cổng
- 28. Tại sao trình duyệt web không quan tâm đến số cổng khi gửi cookie?
- 29. Có thể bật tcp, http và websocket tất cả bằng cách sử dụng cùng một cổng không?
- 30. Có thể thay đổi mã trạng thái HTTP được trả về khi cổng proxy_pass bị tắt trong nginx không?
[Âm thanh như nó phức tạp hơn điều này trong đời thực.] (http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific/4212964#4212964) – bzlm