2009-09-01 4 views
36

Sau một vài thử nghiệm, tôi bắt đầu đi đến kết luận rằng một trình duyệt không gửi tiêu đề HTTP của Người giới thiệu khi một lần nhấp vào một trang http từ một trang https.Tham chiếu tiêu đề HTTP có được gửi khi truy cập trang http từ trang https không?

Lý do bảo mật là gì? Được định nghĩa ở đâu đó trong tiêu chuẩn?

+0

Trong bất kỳ trường hợp nó là hoàn toàn tùy thuộc vào khách hàng nếu Referer nên được thiết lập hay không. –

+1

@Brian: nhưng khách hàng phải tuân thủ/tôn trọng RFC xác định giao thức họ đang sử dụng. –

+0

Câu trả lời được chấp nhận hiện tại là một câu trả lời tốt, nhưng nó giống như câu trả lời của @ avid đã được đăng trước đó. – mikemaccana

Trả lời

53

Các HTTP RFC tiểu bang, trong phần 15.1.3 Encoding Sensitive Information in URI's:

Khách hàng KHÔNG NÊN bao gồm trường tiêu đề trong yêu cầu HTTP HTTP (không an toàn) nếu trang giới thiệu là được chuyển bằng giao thức bảo mật.

Vì vậy, đây là hành vi mong đợi/tiêu chuẩn.

+2

Ok, vậy làm cách nào và tại sao google gửi người giới thiệu từ https đến các trang web không được bảo mật? – confiq

+2

@confiq vì nó nói 'KHÔNG NÊN? –

17

Vâng, được định nghĩa trong standard:

Khách hàng KHÔNG NÊN bao gồm một header field Referer trong một HTTP yêu cầu (không an toàn) nếu trang giới thiệu được chuyển với một giao thức an toàn

+2

Tôi sẽ thêm một chút giải thích, url https thường chứa thông tin nhạy cảm, chẳng hạn như sessionid, số tài khoản, vv Tất nhiên điều này là xấu ngay cả trên SSL, nhưng nó vẫn được thực hiện ... Và dù sao, phiên HTTPS thường là ứng dụng nhạy cảm, không có lý do gì để không cần thiết để lộ thông tin đó. – AviD

4

Lý do: Đôi khi SessionID được mã hóa URL. Các trang HTTP có thể có kịch bản lệnh chéo trang web đánh cắp phiên từ giao tiếp HTTPS. Để ngăn chặn điều này, liên kết giới thiệu không được truyền trên quá trình chuyển đổi HTTPS sang HTTP sao cho ID sessin được mã hóa URL không thể bị đánh cắp.

+0

op yêu cầu http -> https, chứ không phải ngược lại. – dsas

+2

@ dsas "khi một cú nhấp chuột vào một trang http từ một trang https" có nghĩa là https -> http, không phải http -> https. –

+0

@JohnPick bạn nói đúng, tôi không chắc tôi đã hiểu sai điều đó như thế nào. – dsas

19

Thực ra nó không còn là tiến thẳng nữa (2014 trở đi), theo điều này w3c document on referrer policy.

Hành vi mặc định là trình duyệt sẽ không gửi thông tin liên kết giới thiệu khi chuyển từ HTTPS sang HTTP. Tuy nhiên, trình duyệt sẽ gửi liên kết giới thiệu khi chuyển từ HTTPS sang HTTPS.

Ngoài ra, trong HTML5, có một thẻ mới meta có tên là giới thiệu, trông như thế này:

<meta name="referrer" content="origin"> 

New browsers have already implemented this. Vì vậy, có hay không trình duyệt sẽ gửi liên kết giới thiệu, sẽ phụ thuộc vào thẻ meta này trong tương lai gần. Nếu thẻ meta này không được bao gồm trong HTML của trang, thì trình duyệt sẽ sử dụng hành vi mặc định.

Sau đây là các giá trị có thể của thuộc tính nội dung của người giới thiệu thẻ meta:

  • không kết giới thiệu: Người giới thiệu sẽ không được gửi, bất kể HTTP hoặc HTTPS
  • gốc: Chỉ có nguồn gốc (chính) miền sẽ được gửi dưới dạng giới thiệu
  • nguồn gốc khi chuyển giao: Cùng một nguồn gốc sẽ gửi URL liên kết giới thiệu đầy đủ và nguồn gốc chéo sẽ chỉ gửi URL gốc làm liên kết giới thiệu
  • no-referrer-when-downgrade: Đây là hành vi mặc định khi không có liên kết giới thiệu thẻ meta được cung cấp trên trang.
  • không an toàn-url: Điều này sẽ luôn gửi giới thiệu, bất kể HTTP hoặc HTTPS

Ngoài ra, có một số di sản giá trị cho thẻ meta giới thiệu thuộc tính.Đây là những không còn được khuyến khích, nhưng được sử dụng trong nhiều trang web tại thời điểm này:

  • không bao giờ: giống như không giới thiệu
  • mặc định: giống như không giới thiệu-khi-hạ cấp
  • luôn: giống như không an toàn -URL

tôi hy vọng thông tin này sẽ rất hữu ích cho những người chỉ tìm thấy bài này sau năm 2014.

+0

Gợi ý hay. Tuy nhiên nó không hoạt động trên tất cả các thiết bị. : (Chrome trong PC/Mac hoạt động tốt nhưng Chrome trong ** Andorid ** KHÔNG hoạt động! – Kane